【实验0001】K8S环境下使用skywalking和Envoy 访问日志服务对service mesh进行观察

【实验0001】K8S环境下使用skywalking和Envoy 访问日志服务对service mesh进行观察

部分原创,部分缝合。

版本信息

  • centos version: 7.9 minimal
  • minikube version: v1.26.0
  • kubernetes version: v1.24.1
  • docker version: 20.10.21
  • istioctl version: 1.14.1
  • helm version: 3.9.2

硬件信息

  • ESXI5.5.0 虚拟机 ☆开启VMX☆
  • CPU:16c16T
  • MEM:64GB

开始实验

  • 安装操作系统centos 7.9 minimal 过程不表
  • minikube安装
#安装工具包,方便操作

yum install -y net-tools lrzsz wget unzip

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
setenforce 0  # 临时

# 关闭swap
swapoff -a  # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0 # 禁止使用 swap 空间,只有当系统 OOM 时才允许使用它
vm.overcommit_memory=1 # 不检查物理内存是否够用
vm.panic_on_oom=0 # 开启 OOM
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF

# 生效
sysctl --system  

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-20.10.21-3.el7
systemctl enable docker && systemctl start docker
cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"],
  "dns":["8.8.8.8","114.114.114.114"]
}
EOF
systemctl daemon-reload
systemctl restart docker

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

#yum安装kubectl
yum install -y kubectl-1.24.1


#新建一个普通用户
useradd dev
passwd dev
usermod -a -G wheel dev
usermod -a -G docker dev

#切换到dev用户
su - dev
#后续命令全部使用dev用户执行
#如curl无法下载,请手动下载到本地再上传到服务器然后执行安装命令。
curl -LO https://storage.googleapis.com/minikube/releases/v1.26.0/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

#上传minikube基础镜像(镜像下载神秘代码:1janEtbwY3TNH3a_c80npVg🐴pwov)
minikube_images_v1.24.1.tar 
docker load -i minikube_images_v1.24.1.tar

minikube start --cpus=4 --memory 8192 --disk-size 32g --kubernetes-version=v1.24.1
#会下载两个镜像,一个stable_v0.0.32,一个preloaded-images-k8s-v18-v1.24.1-docker-overlay2-amd64
#第一次启动肯定失败,不要慌,不要ctrl+c!!!等待他自己失败。

#导入基础镜像到minikube(全入一遍以防万一)
minikube image load k8s.gcr.io/pause:3.7
minikube image load k8s.gcr.io/pause:3.6
minikube image load k8s.gcr.io/kube-scheduler:v1.24.1
minikube image load k8s.gcr.io/kube-proxy:v1.24.1
minikube image load k8s.gcr.io/kube-controller-manager:v1.24.1
minikube image load k8s.gcr.io/kube-apiserver:v1.24.1
minikube image load k8s.gcr.io/etcd:3.5.3-0
minikube image load k8s.gcr.io/coredns/coredns:v1.8.6
minikube image load gcr.io/k8s-minikube/storage-provisioner:v5

minikube stop
minikube start --cpus=4 --memory 8192 --disk-size 32g --kubernetes-version=v1.24.1
##给阿姨倒一杯卡不踢no!!!!!等待
##出现  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default 完成
kubectl get no 出现minikube节点,minikube的安装到此结束。

  • 安装istio(使用dev用户)
export ISTIO_VERSION=1.7.1

curl -L https://istio.io/downloadIstio | sh - 

sudo mv $PWD/istio-$ISTIO_VERSION/bin/istioctl /usr/local/bin/

istioctl install --set profile=demo

#启动访问日志服务
istioctl  manifest install \
        --set meshConfig.enableEnvoyAccessLogService=true \
        --set meshConfig.defaultConfig.envoyAccessLogService.address=skywalking-oap.istio-system:11800

#给命名空间干上标签        
kubectl label namespace default istio-injection=enabled

  • 安装helm
curl -sSLO https://get.helm.sh/helm-v3.0.0-linux-amd64.tar.gz

sudo tar xz -C /usr/local/bin --strip-components=1 linux-amd64/helm -f helm-v3.0.0-linux-amd64.tar.gz

# Clone SkyWalking Helm Chart

git clone https://ghproxy.com/https://github.com/apache/skywalking-kubernetes

cd skywalking-kubernetes/chart

git reset --hard dd749f25913830c47a97430618cefc4167612e75

# Update dependencies

helm dep up skywalking

# 发布 SkyWalking

helm -n istio-system install skywalking skywalking \
        --set oap.storageType='h2'\
        --set ui.image.tag=8.4.0 \
        --set oap.image.tag=8.4.0-es7 \
        --set oap.replicas=1 \
        --set oap.env.SW_ENVOY_METRIC_ALS_HTTP_ANALYSIS=k8s-mesh \
        --set oap.env.JAVA_OPTS='-Dmode=' \
        --set oap.envoy.als.enabled=true \
        --set elasticsearch.enabled=false

export POD_NAME=$(kubectl get pods -A -l "app=skywalking,release=skywalking,component=ui" -o name)

echo $POD_NAME

kubectl -n istio-system --address 0.0.0.0 port-forward $POD_NAME 8080:8080
##此时通过ip:port已经可以访问skywalking页面了,但是没有数据,在部署demo系统以后我们回来再看。

到此最恶心的一步来了!(可以直接跳过步骤,方法在最后)

  • 安装skaffold
curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/v2.0.0/skaffold-linux-amd64 && \
sudo install skaffold /usr/local/bin/
  • 下载源码
git clone https://ghproxy.com/https://github.com/GoogleCloudPlatform/microservices-demo.git
  • 修改代码中所有出现的githubURL前面增加代理https://ghproxy.com
  • 修改pip源,增加go代理,入下图示例:
#下图中的修改的字符串如下:
RUN go env -w GOPROXY=https://goproxy.cn

https://ghproxy.com/

-i https://pypi.tuna.tsinghua.edu.cn/simple

在这里插入图片描述

  • 最后是进入microservices-demo目录下,直接执行
skaffold run
  • 漫长的等待后,kubectl get po -n default 就会出现11个微服务了,其中各种报错,大家自行google或者百度吧。
kubectl --address 0.0.0.0 port-forward svc/frontend-external 8090:80

访问ip:port 即可访问demo了

在这里插入图片描述

此时再去看skywalking的仪表盘

在这里插入图片描述

直接下载目标镜像

docker pull gcr.io/google-samples/microservices-demo/emailservice:v0.4.1
docker pull gcr.io/google-samples/microservices-demo/checkoutservice:v0.4.1
docker pull gcr.io/google-samples/microservices-demo/recommendationservice:v0.4.1
docker pull gcr.io/google-samples/microservices-demo/frontend:v0.4.1
docker pull gcr.io/google-samples/microservices-demo/paymentservice:v0.4.1
docker pull gcr.io/google-samples/microservices-demo/productcatalogservice:v0.4.1
docker pull gcr.io/google-samples/microservices-demo/cartservice:v0.4.1
docker pull gcr.io/google-samples/microservices-demo/loadgenerator:v0.4.1
docker pull gcr.io/google-samples/microservices-demo/currencyservice:v0.4.1
docker pull gcr.io/google-samples/microservices-demo/shippingservice:v0.4.1
docker pull gcr.io/google-samples/microservices-demo/adservice:v0.4.1


minikube image load gcr.io/google-samples/microservices-demo/emailservice:v0.4.0
minikube image load gcr.io/google-samples/microservices-demo/checkoutservice:v0.4.0
minikube image load gcr.io/google-samples/microservices-demo/recommendationservice:v0.4.0
minikube image load gcr.io/google-samples/microservices-demo/frontend:v0.4.0
minikube image load gcr.io/google-samples/microservices-demo/paymentservice:v0.4.0
minikube image load gcr.io/google-samples/microservices-demo/productcatalogservice:v0.4.0
minikube image load gcr.io/google-samples/microservices-demo/cartservice:v0.4.0
minikube image load gcr.io/google-samples/microservices-demo/loadgenerator:v0.4.0
minikube image load gcr.io/google-samples/microservices-demo/currencyservice:v0.4.0
minikube image load gcr.io/google-samples/microservices-demo/shippingservice:v0.4.0
minikube image load gcr.io/google-samples/microservices-demo/adservice:v0.4.0

kubectl apply -f https://ghproxy.com/https://github.com/GoogleCloudPlatform/microservices-demo/blob/main/release/kubernetes-manifests.yaml

kubectl --address 0.0.0.0 port-forward svc/frontend-external 8090:80

<think>我们正在使用Minikube部署Kubernetes集群,并希望在其上部署Apache SkyWalking。根据引用,我们可以使用Helm Chart来简化部署过程。以下是部署步骤的详细说明: 1. **启动Minikube**:确保Minikube有足够的资源。根据引用[1],我们需要至少4GB内存2个CPU核心。 ```bash minikube start --memory=4096 --cpus=2 ``` 2. **安装Helm**:Helm是Kubernetes的包管理工具。根据引用[3]引用[5],我们需要安装Helm。 ```bash # 下载并安装Helm curl -sSLO https://get.helm.sh/helm-v3.0.0-linux-amd64.tar.gz sudo tar xz -C /usr/local/bin --strip-components=1 linux-amd64/helm -f helm-v3.0.0-linux-amd64.tar.gz ``` 3. **克隆SkyWalking Helm Chart仓库**:使用Git克隆SkyWalking的Helm Chart仓库。 ```bash git clone https://github.com/apache/skywalking-kubernetes cd skywalking-kubernetes/chart ``` 4. **更新依赖**:进入chart目录后,更新Helm依赖。 ```bash helm dep up skywalking ``` 5. **部署SkyWalking**:使用Helm安装SkyWalking。由于我们是在Minikube环境中,可能不需要使用Elasticsearch,可以使用H2作为存储(但注意H2仅适用于测试)。根据引用[3]中的命令,我们进行修改以适应Minikube环境(例如,使用H2存储,并设置合适的镜像标签)。 ```bash helm -n istio-system install skywalking skywalking \ --set oap.storageType='h2' \ --set ui.image.tag=8.3.0 \ --set oap.image.tag=8.3.0-es7 \ --set oap.replicas=1 \ --set oap.env.SW_ENVOY_METRIC_ALS_HTTP_ANALYSIS=k8s-mesh \ --set oap.env.JAVA_OPTS='-Dmode=' \ --set oap.envoy.als.enabled=true \ --set elasticsearch.enabled=false ``` 注意:这里我们创建了一个命名空间`istio-system`,如果不存在,请先创建: ```bash kubectl create namespace istio-system ``` 6. **访问SkyWalking UI**:部署完成后,我们可以通过端口转发来访问SkyWalking UI。 ```bash kubectl -n istio-system port-forward svc/skywalking-ui 8080:80 ``` 然后在浏览器中访问 http://localhost:8080。 **注意事项**: - 上述步骤中,我们使用了H2作为存储,这意味着数据不会持久化,重启后数据会丢失。对于生产环境,应该使用持久化存储(如Elasticsearch)。 - 在Minikube中,我们可能还需要启用Ingress等插件,但上述部署中并没有使用Ingress,而是通过端口转发来访问。 **验证部署**: - 可以使用`kubectl get pods -n istio-system`来查看SkyWalking的OAPUI等Pod是否正常运行。 **引用说明**: - 我们参考了引用[3]中提供的Helm部署命令,但根据Minikube环境做了调整(例如,使用H2存储并禁用Elasticsearch)[^3]。 - 引用[1]提供了Minikube启动的配置参数[^1]。 **相关问题**: 1. 如何在Minikube中启用持久化存储来部署SkyWalking? 2. 如何配置SkyWalking使用Elasticsearch作为存储后端? 3. 如何将应用程序与SkyWalking集成以进行监控?</think>### 在 Minikube 上部署 Apache SkyWalking 的步骤 #### 1. **启动 Minikube 集群** 确保分配足够资源(参考引用[1]): ```bash minikube start --memory=4096 --cpus=2 --driver=docker ``` > 说明:`--memory=4096` 保证 4GB 内存,`--cpus=2` 分配 2 个 CPU 核心,满足 SkyWalking 基础运行需求[^1]。 #### 2. **安装 Helm** ```bash # 下载 Helm curl -sSLO https://get.helm.sh/helm-v3.0.0-linux-amd64.tar.gz # 解压并安装 sudo tar xz -C /usr/local/bin --strip-components=1 linux-amd64/helm -f helm-v3.0.0-linux-amd64.tar.gz # 验证安装 helm version ``` #### 3. **部署 SkyWalking Helm Chart** ```bash # 克隆 SkyWalking 仓库 git clone https://github.com/apache/skywalking-kubernetes cd skywalking-kubernetes/chart # 更新依赖并部署(简化版) helm dep update skywalking helm -n istio-system install skywalking skywalking \ --set oap.storageType='h2' \ # 使用轻量级 H2 存储(适合测试) --set elasticsearch.enabled=false \ # 禁用 ES 以节省资源 --set oap.replicas=1 \ # 单节点 OAP --set ui.image.tag=8.3.0 \ # 指定 UI 版本 --set oap.image.tag=8.3.0-es7 # 指定 OAP 版本 ``` > **关键参数说明**: > - `storageType='h2'`:使用嵌入式数据库,无需额外存储组件[^3]。 > - `elasticsearch.enabled=false`:在 Minikube 中禁用 ES 以降低资源消耗。 > - 完整参数参考 [SkyWalking Helm Chart](https://github.com/apache/skywalking-kubernetes/tree/master/chart)[^5]。 #### 4. **验证部署** ```bash # 检查 Pod 状态 kubectl -n istio-system get pods -l app=skywalking # 预期输出示例 NAME READY STATUS RESTARTS AGE skywalking-oap-86c95ff6c9-2jqkz 1/1 Running 0 3m skywalking-ui-5d9f6d8f6d-7xwzv 1/1 Running 0 3m ``` #### 5. **访问 SkyWalking UI** ```bash # 端口转发 kubectl -n istio-system port-forward svc/skywalking-ui 8080:80 ``` 浏览器访问:`http://localhost:8080` --- ### 部署注意事项 1. **资源限制**:Minikube 默认资源有限,务必通过 `minikube start` 分配足够资源(至少 4GB 内存)[^1]。 2. **存储选择**: - 测试环境使用 `H2`(嵌入式数据库),无需持久化卷。 - 生产环境:需启用 Elasticsearch 并配置持久化存储(需额外调整 Minikube 存储配置)。 3. **版本兼容性**:确保 Helm Chart 版本与 SkyWalking 版本匹配(示例使用 v8.3.0)[^3]。 4. **服务网格集成**:若需监控 Istio 服务,启用 `oap.envoy.als.enabled=true` 参数[^2]。 --- ### 性能优化建议 - **降低资源消耗**:在 `values.yaml` 中调低 OAP 的 `JAVA_OPTS` 内存参数(如 `-Xms512m -Xmx512m`)。 - **启用缓存**:配置 OAP 的 `Caffeine` 缓存减少数据库压力。 - **精简组件**:通过 `--set` 禁用非必要模块(如 `skywalking-so11y`)。 > 提示:完整部署示例可参考 [SkyWalking Showcase](https://skywalking.apache.org/docs/skywalking-showcase/next/readme/)[^4],其中包含微服务监控实践。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值