安装过程所有资料获取地址
1.准备一个K8S集群
这里部署k8s版本为1.22或者1.23版本。这里参考kubeedge支持的程度,选择1.22版本,后续会支持更高的k8s版本。
相关部署环境及部署组件:
主机名ip地址节点类型系统版本k8s-ke-cloud192.168.186.128master、etcdcentos7.9k8s-ke-edge1192.168.186.129workercentos7.9ke-edge1192.168.186.130agent,edgecentos7.9
最终安装成功是这样的:
[root@k8s-ke-cloud ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-ke-cloud Ready control-plane,master 4h19m v1.22.17
k8s-ke-edge1 Ready
ke-edge1 Ready agent,edge 65m v1.23.15-kubeedge-v1.13.1
[root@k8s-ke-cloud ~]#
#主机名:
hostnamectl set-hostname k8s-ke-cloud && bash
hostnamectl set-hostname k8s-ke-edge1 && bash
hostnamectl set-hostname ke-edge1 && bash
#关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld
#关闭selinux:
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时
#关闭swap:
swapoff -a # 临时
sed -i 's/.*swap.*/#&/' /etc/fstab # 永久
#添加hosts:
cat >> /etc/hosts << EOF
192.168.186.128 k8s-ke-cloud
192.168.186.129 k8s-ke-edge1
192.168.186.130 ke-edge1
EOF
#设置yum源
yum -y install wget
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
#时间同步
yum install -y chrony -y
cat > /etc/chrony.conf << EOF
server ntp.aliyun.com iburst
stratumweight 0
driftfile /var/lib/chrony/drift
rtcsync
makestep 10 3
bindcmdaddress 127.0.0.1
bindcmdaddress ::1
keyfile /etc/chrony.keys
commandkey 1
generatecommandkey
logchange 0.5
logdir /var/log/chrony
EOF
systemctl enable --now chronyd
chronyc sources
#配置内核参数
cat > /etc/modprobe.d/k8s.conf < #!/bin/bash #modprobe -- br_netfilter modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 EOF chmod 755 /etc/modprobe.d/k8s.conf bash /etc/modprobe.d/k8s.conf lsmod | grep -E "ip_vs|nf_conntrack_ipv4" #加载ip_vs内核模块 cat > /etc/sysctl.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-arptables = 1 net.ipv4.ip_forward=1 net.ipv4.ip_forward_use_pmtu = 0 EOF sysctl --system sysctl -a|grep "ip_forward" #安装Docker yum -y install epel-release wget 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.0-3.el7 #指定版本 #yum -y install docker-ce #安装docker最新版 systemctl enable docker && systemctl start docker && systemctl status docker #设置仓库地址 cat > /etc/docker/daemon.json << EOF { "registry-mirrors":["https://rsbud4vc.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com","http://qtid6917.mirror.aliyuncs.com", "https://rncxm540.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"] } EOF systemctl restart docker && systemctl status docker docker --version #添加yum 源 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 #安装kubeadm,kubelet 和kubectl yum clean all && yum makecache -y #yum list kubectl --showduplicates | sort -r #列出kubectl可用的版本 yum install -y kubelet-1.22.17-0 kubeadm-1.22.17-0 kubectl-1.22.17-0 systemctl enable kubelet kubeadm init --apiserver-advertise-address=192.168.186.128 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.22.17 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config kubectl apply -f calico.yaml #这个文件单独发你了 部署metrics-server wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml kubectl apply -f components.yaml kubectl get pods -n kube-system #修改yaml文件,让metrics-server不需要识别证书 kubectl patch deploy metrics-server -n kube-system --type='json' -p='[{"op":"add","path":"/spec/template/spec/containers/0/args/-","value":"--kubelet-insecure-tls"}]' # 在kubernetes群集中创建Nginx kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 --type=NodePort kubectl scale deployment nginx --replicas=2 #pod副本的数量增加到10个 kubectl get pod,svc -o wide #测试正常后请删除 kubectl delete deployment,svc nginx kubectl get pod,svc,deployment 浏览器打开:集群任意IP:端口 浏览器能打开 到这里说明集群安装成功了 2. 配置MetaILB 由于需要为cloudcore与edgecore提供通信地址,建议使用LB为cloudcore提供公网IP或k8s集群节点相同网段IP地址,实际生产中使用的是公网IP地址 kubectl edit configmap -n kube-system kube-proxy #修改配置文件 apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration mode: "ipvs" ipvs: strictARP: true kubectl rollout restart daemonset kube-proxy -n kube-system #重新加载并重启 kubectl get pods -n kube-system wget https://raw.githubusercontent.com/metallb/metallb/v0.13.5/config/manifests/metallb-native.yaml kubectl apply -f metallb-native.yaml kubectl get pods -n metallb-system [root@k8s-ke-cloud ~]# kubectl get pods -n metallb-system NAME READY STATUS RESTARTS AGE controller-6846c94466-w6v8v 1/1 Running 0 37s speaker-59hr4 1/1 Running 0 37s speaker-g5rv5 1/1 Running 0 36s [root@k8s-ke-cloud ~]# #配置地址池——二层模式转发,配置使 MetalLB 能够控制 IP 从 到 ,并配置第 2 层 模式 cat > first-ipaddresspool.yaml << EOF apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: first-pool namespace: metallb-system spec: addresses: - 192.168.186.240-192.168.186.250 EOF kubectl apply -f first-ipaddresspool.yaml #应用 kubectl get ipaddresspool -n metallb-system #查询 [root@k8s-ke-cloud ~]# kubectl get ipaddresspool -n metallb-system #查询 NAME AGE first-pool 56s [root@k8s-ke-cloud ~]# cat > l2-forward.yaml << EOF apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: example namespace: metallb-system EOF kubectl apply -f l2-forward.yaml kubectl get l2advertisements -n metallb-system [root@k8s-ke-cloud ~]# kubectl get l2advertisements -n metallb-system NAME AGE example 112s [root@k8s-ke-cloud ~]# #测试——使用LoadBalancer cat > nginx-loadbalancer.yaml << EOF apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: selector: matchLabels: app: nginx replicas: 2 # 可根据需要进行调整 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancer EOF kubectl apply -f nginx-loadbalancer.yaml kubectl get pods,svc [root@k8s-ke-cloud ~]# kubectl get pods,svc NAME READY STATUS RESTARTS AGE pod/nginx-deployment-7848d4b86f-nc7cx 1/1 Running 0 77s pod/nginx-deployment-7848d4b86f-prglx 1/1 Running 0 77s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 service/nginx-service LoadBalancer 10.106.158.39 192.168.186.240 80:31243/TCP 77s [root@k8s-ke-cloud ~]# #测试后删除 kubectl delete deployment nginx-deployment kubectl delete svc nginx-service 3. 部署kubeedge 3.1 部署cloudcore #获取keadm工具 wget https://github.com/kubeedge/kubeedge/releases/download/v1.13.1/keadm-v1.13.1-linux-amd64.tar.gz tar -zxvf keadm-v1.13.1-linux-amd64.tar.gz #解压 cp keadm-v1.13.1-linux-amd64/keadm/keadm /usr/local/bin/ #复制keadm keadm version #测试 #cloudcore部署 keadm init --advertise-address=192.168.186.240 --set iptablesManager.mode="external" --profile version=v1.13.1 [root@k8s-ke-cloud ~]# keadm init --advertise-address=192.168.186.240 --set iptablesManager.mode="external" --profile version=v1.13.1 Failed to get the latest KubeEdge release version, error: failed to get latest version from https://kubeedge.io/latestversion: Get "https://kubeedge.io/latestversion": x509: certificate has expired or is not yet valid: current time 2023-05-27T12:39:57+08:00 is before 2023-10-07T01:12:26Z Failed to get the latest KubeEdge release version, error: failed to get latest version from https://kubeedge.io/latestversion: Get "https://kubeedge.io/latestversion": x509: certificate has expired or is not yet valid: current time 2023-05-27T12:39:59+08:00 is before 2023-10-07T01:12:26Z Failed to get the latest KubeEdge release version, error: failed to get latest version from https://kubeedge.io/latestversion: Get "https://kubeedge.io/latestversion": x509: certificate has expired or is not yet valid: current time 2023-05-27T12:39:59+08:00 is before 2023-10-07T01:12:26Z Failed to get the latest KubeEdge release version, error: failed to get latest version from https://kubeedge.io/latestversion: Get "https://kubeedge.io/latestversion": x509: certificate has expired or is not yet valid: current time 2023-05-27T12:39:59+08:00 is before 2023-10-07T01:12:26Z Failed to get the latest KubeEdge release version, error: failed to get latest version from https://kubeedge.io/latestversion: Get "https://kubeedge.io/latestversion": x509: certificate has expired or is not yet valid: current time 2023-05-27T12:39:59+08:00 is before 2023-10-07T01:12:26Z Failed to get the latest KubeEdge release version, will use default version: 1.12.0 Kubernetes version verification passed, KubeEdge installation will start... CLOUDCORE started =========CHART DETAILS======= NAME: cloudcore LAST DEPLOYED: Sat May 27 12:40:02 2023 NAMESPACE: kubeedge STATUS: deployed REVISION: 1 [root@k8s-ke-cloud ~]# keadm gettoken #生成token,请记住 kubectl get ns kubectl get pod,svc -n kubeedge [root@k8s-ke-cloud ~]# ps -ef|grep cloudcore #查询到进程,负责加入不进集群 root 2447 8609 0 09:54 pts/0 00:00:00 grep --color=auto cloudcore root 9990 9943 0 09:09 ? 00:00:01 cloudcore [root@k8s-ke-cloud ~]# netstat -anltp #查看端口 [root@k8s-ke-cloud ~]# keadm gettoken #生成token,请记住 f28b7497c541833c1d7f8ebcdf4532ff82d297a75fb879bb6b1d793c06f1137a.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODUyNDgzNzB9.LzeoF_7GVgajogyp_8k8co37u6OC8NCxGWb3E8OzNUU [root@k8s-ke-cloud ~]# [root@k8s-ke-cloud ~]# kubectl get pod,svc -n kubeedge NAME READY STATUS RESTARTS AGE pod/cloud-iptables-manager-72l9c 1/1 Running 0 80s pod/cloudcore-5475cc4b46-xqj9m 1/1 Running 0 80s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/cloudcore ClusterIP 10.107.192.156 [root@k8s-ke-cloud ~]# #修改cloudcore的svc类型为loadBalancer kubectl edit svc cloudcore -n kubeedge #修改内容 49 selector: 50 k8s-app: kubeedge 51 kubeedge: cloudcore 52 sessionAffinity: None 53 type: LoadBalancer #修改为LoadBalancer 54 status: 55 loadBalancer: {} [root@k8s-ke-cloud ~]# kubectl get svc -n kubeedge #修改后看到了地址池中的第一个地址 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE cloudcore LoadBalancer 10.107.192.156 192.168.186.240 10000:30718/TCP,10001:30622/TCP,10002:30083/TCP,10003:30798/TCP,10004:31650/TCP 4m45s [root@k8s-ke-cloud ~]# [root@k8s-ke-cloud ~]# kubectl get pods,svc,deployment -n kubeedge #看到了都正常 NAME READY STATUS RESTARTS AGE pod/cloud-iptables-manager-72l9c 1/1 Running 0 5m49s pod/cloudcore-5475cc4b46-xqj9m 1/1 Running 0 5m49s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/cloudcore LoadBalancer 10.107.192.156 192.168.186.240 10000:30718/TCP,10001:30622/TCP,10002:30083/TCP,10003:30798/TCP,10004:31650/TCP 5m50s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/cloudcore 1/1 1 1 5m49s [root@k8s-ke-cloud ~]# 因为边缘计算的硬件条件都不好,这里我们需要打上标签,让一些应用不扩展到edge节点上去, 但凡是daemonset的都不可以去占用edge节点的硬件资源 kubectl get daemonset -n kube-system |grep -v NAME |awk '{print $1}' | xargs -n 1 kubectl patch daemonset -n kube-system --type='json' -p='[{"op": "replace","path": "/spec/template/spec/affinity","value":{"nodeAffinity":{"requiredDuringSchedulingIgnoredDuringExecution":{"nodeSelectorTerms":[{"matchExpressions":[{"key":"node-role.kubernetes.io/edge","operator":"DoesNotExist"}]}]}}}}]' kubectl get daemonset -n metallb-system |grep -v NAME |awk '{print $1}' | xargs -n 1 kubectl patch daemonset -n metallb-system --type='json' -p='[{"op": "replace","path": "/spec/template/spec/affinity","value":{"nodeAffinity":{"requiredDuringSchedulingIgnoredDuringExecution":{"nodeSelectorTerms":[{"matchExpressions":[{"key":"node-role.kubernetes.io/edge","operator":"DoesNotExist"}]}]}}}}]' 4. 部署edgecore # 安装docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo yum makecache fast yum -y install docker-ce-20.10.0-3.el7 #这里指定版本 # 生成docker配置文件 mkdir -p /etc/docker/ touch /etc/docker/daemon.json cat > /etc/docker/daemon.json << EOF { "registry-mirrors":["https://rsbud4vc.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com","http://qtid6917.mirror.aliyuncs.com", "https://rncxm540.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=cgroupfs"] } EOF # 启动docker systemctl enable docker --now systemctl start docker systemctl status docker docker --version # 这里注意:cgroupdriver=cgroupfs。修改为systemd则会出现两者之间不一致的问题 #获取keadm工具 wget https://github.com/kubeedge/kubeedge/releases/download/v1.13.1/keadm-v1.13.1-linux-amd64.tar.gz tar -zxvf keadm-v1.13.1-linux-amd64.tar.gz #解压 cp keadm-v1.13.1-linux-amd64/keadm/keadm /usr/local/bin/ #复制keadm keadm version #测试 docker load -i coreedge.tar && docker load -i image.tar && docker load -i kubeedge.tar && docker load -i metallb_image.tar && docker load -i metrics-server.tar && docker load -i nginx.tar #请注意token和ip和端口(端口是固定的) keadm join --token=f28b7497c541833c1d7f8ebcdf4532ff82d297a75fb879bb6b1d793c06f1137a.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODUyNDgzNzB9.LzeoF_7GVgajogyp_8k8co37u6OC8NCxGWb3E8OzNUU --cloudcore-ipport=192.168.186.240:10000 --kubeedge-version=v1.13.1 执行后报错如下: [root@ke-edge1 ~]# keadm join --token=f28b7497c541833c1d7f8ebcdf4532ff82d297a75fb879bb6b1d793c06f1137a.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODUyNDgzNzB9.LzeoF_7GVgajogyp_8k8co37u6OC8NCxGWb3E8OzNUU --cloudcore-ipport=192.168.186.240:10000 --kubeedge-version=v1.13.1 I0527 00:54:53.977429 23811 command.go:845] 1. Check KubeEdge edgecore process status I0527 00:54:54.483729 23811 command.go:845] 2. Check if the management directory is clean I0527 00:54:54.605584 23811 join.go:107] 3. Create the necessary directories I0527 00:54:55.208656 23811 join.go:184] 4. Pull Images Pulling kubeedge/installation-package:v1.13.1 ... E0527 00:54:55.209959 23811 remote_image.go:160] "Get ImageStatus from image service failed" err="rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.ImageService" image="kubeedge/installation-package:v1.13.1" Error: edge node join failed: pull Images failed: rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.ImageService execute keadm command failed: edge node join failed: pull Images failed: rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.ImageService [root@ke-edge1 ~]# 解决办法: rm -rf /etc/containerd/config.toml containerd config default > /etc/containerd/config.toml systemctl restart containerd 请注意,增加了参数 keadm join --token=f28b7497c541833c1d7f8ebcdf4532ff82d297a75fb879bb6b1d793c06f1137a.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODUyNDgzNzB9.LzeoF_7GVgajogyp_8k8co37u6OC8NCxGWb3E8OzNUU --cloudcore-ipport=192.168.186.240:10000 --kubeedge-version=v1.13.1 --runtimetype=docker 1.13版本默认使用containerd,如果需要使用docker,runtimetype和remote runtime endpoint都要在keadm join时指定 [root@ke-edge1 ~]# rm -fr /etc/kubeedge/ [root@ke-edge1 ~]# keadm join --token=f28b7497c541833c1d7f8ebcdf4532ff82d297a75fb879bb6b1d793c06f1137a.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODUyNDgzNzB9.LzeoF_7GVgajogyp_8k8co37u6OC8NCxGWb3E8OzNUU --cloudcore-ipport=192.168.186.240:10000 --kubeedge-version=v1.13.1 --runtimetype=docker I0527 00:58:27.012345 24169 command.go:845] 1. Check KubeEdge edgecore process status I0527 00:58:27.022045 24169 command.go:845] 2. Check if the management directory is clean I0527 00:58:27.022111 24169 join.go:107] 3. Create the necessary directories I0527 00:58:27.024162 24169 join.go:184] 4. Pull Images Pulling kubeedge/installation-package:v1.13.1 ... Pulling eclipse-mosquitto:1.6.15 ... Pulling kubeedge/pause:3.6 ... I0527 00:58:27.035700 24169 join.go:184] 5. Copy resources from the image to the management directory I0527 00:58:34.218860 24169 join.go:184] 6. Start the default mqtt service I0527 00:58:34.224341 24169 join.go:107] 7. Generate systemd service file I0527 00:58:34.239674 24169 join.go:107] 8. Generate EdgeCore default configuration I0527 00:58:34.239737 24169 join.go:270] The configuration does not exist or the parsing fails, and the default configuration is generated W0527 00:58:34.247643 24169 validation.go:71] NodeIP is empty , use default ip which can connect to cloud. I0527 00:58:34.270597 24169 join.go:107] 9. Run EdgeCore daemon I0527 00:58:39.891427 24169 join.go:435] I0527 00:58:39.891484 24169 join.go:436] KubeEdge edgecore is running, For logs visit: journalctl -u edgecore.service -xe [root@ke-edge1 ~]# [root@ke-edge1 ~]# systemctl status edgecore #检查这个服务正常 ● edgecore.service Loaded: loaded (/etc/systemd/system/edgecore.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2023-05-27 00:58:37 EDT; 1min 57s ago Main PID: 24314 (edgecore) Tasks: 15 Memory: 29.0M CGroup: /system.slice/edgecore.service └─24314 /usr/local/bin/edgecore May 27 00:59:05 ke-edge1 edgecore[24314]: I0527 00:59:05.980371 24314 client.go:89] edge-hub-cli subscribe topic to $hw/events/upload/# May 27 00:59:05 ke-edge1 edgecore[24314]: I0527 00:59:05.980494 24314 client.go:153] finish hub-client pub May 27 00:59:05 ke-edge1 edgecore[24314]: I0527 00:59:05.980510 24314 eventbus.go:71] Init Sub And Pub Client for external mqtt broker tcp://127.0.0.1:...ccessfully May 27 00:59:05 ke-edge1 edgecore[24314]: W0527 00:59:05.980528 24314 eventbus.go:168] Action not found May 27 00:59:05 ke-edge1 edgecore[24314]: I0527 00:59:05.980678 24314 client.go:89] edge-hub-cli subscribe topic to $hw/events/device/+/state/update May 27 00:59:05 ke-edge1 edgecore[24314]: I0527 00:59:05.981141 24314 client.go:89] edge-hub-cli subscribe topic to $hw/events/device/+/twin/+ May 27 00:59:05 ke-edge1 edgecore[24314]: I0527 00:59:05.981834 24314 client.go:89] edge-hub-cli subscribe topic to $hw/events/node/+/membership/get May 27 00:59:05 ke-edge1 edgecore[24314]: I0527 00:59:05.983192 24314 client.go:89] edge-hub-cli subscribe topic to SYS/dis/upload_records May 27 00:59:05 ke-edge1 edgecore[24314]: I0527 00:59:05.983936 24314 client.go:89] edge-hub-cli subscribe topic to +/user/# May 27 00:59:05 ke-edge1 edgecore[24314]: I0527 00:59:05.984966 24314 client.go:97] list edge-hub-cli-topics status, no record, skip sync Hint: Some lines were ellipsized, use -l to show in full. [root@ke-edge1 kubeedge]# ll -ah #此目录下文件生成正常 total 12K drwxr-xr-x. 5 root root 59 May 27 00:58 . drwxr-xr-x. 78 root root 8.0K May 27 00:58 .. drwxr-xr-x. 2 root root 24 May 27 00:58 ca drwxr-xr-x. 2 root root 42 May 27 00:58 certs drwxr-xr-x. 2 root root 27 May 27 00:58 config srwxr-xr-x. 1 root root 0 May 27 00:58 dmi.sock [root@ke-edge1 kubeedge]# cd config/ [root@ke-edge1 config]# ll total 8 -rw-r--r--. 1 root root 4940 May 27 00:58 edgecore.yaml [root@ke-edge1 config]# [root@k8s-ke-cloud ~]# kubectl get nodes #看到边缘节点添加进来了 NAME STATUS ROLES AGE VERSION k8s-ke-cloud Ready control-plane,master 3h18m v1.22.17 k8s-ke-edge1 Ready ke-edge1 Ready agent,edge 4m19s v1.23.15-kubeedge-v1.13.1 [root@k8s-ke-cloud ~]# 4. 测试将pod运行到边缘节点上 #在master上操作 cat > nginx.yaml << EOF apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: selector: matchLabels: app: nginx replicas: 3 # 可根据需要进行调整 template: metadata: labels: app: nginx spec: nodeName: ke-edge1 #如果是集群需要指定调度到变暖 containers: - name: nginx image: nginx ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancer EOF kubectl apply -f nginx.yaml kubectl get pods,svc -o wide [root@k8s-ke-cloud ~]# kubectl get pods,svc -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod/nginx-deployment-6bd7b664fd-p8xcb 1/1 Running 0 115s 172.17.0.4 ke-edge1 pod/nginx-deployment-6bd7b664fd-tr8lk 1/1 Running 0 115s 172.17.0.5 ke-edge1 pod/nginx-deployment-6bd7b664fd-wxc8p 1/1 Running 0 115s 172.17.0.3 ke-edge1 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR service/kubernetes ClusterIP 10.96.0.1 service/nginx-service LoadBalancer 10.105.176.182 192.168.186.241 80:31667/TCP 115s app=nginx [root@k8s-ke-cloud ~]# [root@k8s-ke-cloud ~]# kubectl get pods NAME READY STATUS RESTARTS AGE nginx-deployment-6bd7b664fd-p8xcb 1/1 Running 0 6m39s nginx-deployment-6bd7b664fd-tr8lk 1/1 Running 0 6m39s nginx-deployment-6bd7b664fd-wxc8p 1/1 Running 0 6m39s [root@k8s-ke-cloud ~]# kubectl logs nginx-deployment-6bd7b664fd-p8xcb Error from server: Get "https://192.168.186.130:10350/containerLogs/default/nginx-deployment-6bd7b664fd-p8xcb/nginx": dial tcp 192.168.186.130:10350: connect: connection refused [root@k8s-ke-cloud ~]# iptables -t nat -A OUTPUT -p tcp --dport 10350 -j DNAT --to 192.168.186.240:10003 [root@k8s-ke-cloud ~]# iptables -t nat -A OUTPUT -p tcp --dport 10351 -j DNAT --to 192.168.186.240:10003 [root@k8s-ke-cloud ~]# kubectl logs nginx-deployment-6bd7b664fd-p8xcb Error from server (InternalError): Internal error occurred: [root@ke-edge1 ~]# vim /etc/kubeedge/config/edgecore.yaml #修改edgeStream下的enable: true为这个 edgeStream: enable: true #只修改这个 handshakeTimeout: 30 readDeadline: 15 [root@ke-edge1 ~]# systemctl restart edgecore [root@ke-edge1 ~]# systemctl status edgecore [root@k8s-ke-cloud ~]# kubectl logs nginx-deployment-6bd7b664fd-p8xcb /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh /docker-entrypoint.sh: Configuration complete; ready for start up 2023/05/27 05:34:40 [notice] 1#1: using the "epoll" event method 2023/05/27 05:34:40 [notice] 1#1: nginx/1.25.2 2023/05/27 05:34:40 [notice] 1#1: built by gcc 12.2.0 (Debian 12.2.0-14) 2023/05/27 05:34:40 [notice] 1#1: OS: Linux 3.10.0-1160.el7.x86_64 2023/05/27 05:34:40 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576 2023/05/27 05:34:40 [notice] 1#1: start worker processes 2023/05/27 05:34:40 [notice] 1#1: start worker process 30 2023/05/27 05:34:40 [notice] 1#1: start worker process 31 2023/05/27 05:34:40 [notice] 1#1: start worker process 32 2023/05/27 05:34:40 [notice] 1#1: start worker process 33 [root@k8s-ke-cloud ~]# [root@ke-edge1 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b78081847f20 nginx "/docker-entrypoint.…" 12 minutes ago Up 12 minutes k8s_nginx_nginx-deployment-6bd7b664fd-tr8lk_default_814d1540-7c75-40f9-9351-4081bde1e734_0 b349fb74b005 kubeedge/pause:3.6 "/pause" 13 minutes ago Up 13 minutes k8s_POD_nginx-deployment-6bd7b664fd-tr8lk_default_814d1540-7c75-40f9-9351-4081bde1e734_0 d5e5c3f70530 nginx "/docker-entrypoint.…" 13 minutes ago Up 13 minutes k8s_nginx_nginx-deployment-6bd7b664fd-wxc8p_default_ce3b30a9-71aa-44c1-af57-994f6f47627d_0 183b213b78ea nginx "/docker-entrypoint.…" 13 minutes ago Up 13 minutes k8s_nginx_nginx-deployment-6bd7b664fd-p8xcb_default_9166c2b8-63d2-43ad-b34c-e8a7b8bd8773_0 8c587176a71e kubeedge/pause:3.6 "/pause" 14 minutes ago Up 14 minutes k8s_POD_nginx-deployment-6bd7b664fd-p8xcb_default_9166c2b8-63d2-43ad-b34c-e8a7b8bd8773_0 1b1643dd64a2 kubeedge/pause:3.6 "/pause" 14 minutes ago Up 14 minutes k8s_POD_nginx-deployment-6bd7b664fd-wxc8p_default_ce3b30a9-71aa-44c1-af57-994f6f47627d_0 6138bea41aa3 5dade4ce550b "/docker-entrypoint.…" 49 minutes ago Up 49 minutes k8s_mqtt_mqtt-kubeedge_default_32597cea-87d8-4137-bb4d-0fa08804b88d_0 77a02d19d08e kubeedge/pause:3.6 "/pause" 49 minutes ago Up 49 minutes 0.0.0.0:1883->1883/tcp, 0.0.0.0:9001->9001/tcp k8s_POD_mqtt-kubeedge_default_32597cea-87d8-4137-bb4d-0fa08804b88d_0 [root@ke-edge1 ~]# docker logs b78081847f20 /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh /docker-entrypoint.sh: Configuration complete; ready for start up 2023/05/27 05:35:21 [notice] 1#1: using the "epoll" event method 2023/05/27 05:35:21 [notice] 1#1: nginx/1.25.2 2023/05/27 05:35:21 [notice] 1#1: built by gcc 12.2.0 (Debian 12.2.0-14) 2023/05/27 05:35:21 [notice] 1#1: OS: Linux 3.10.0-1160.el7.x86_64 2023/05/27 05:35:21 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576 2023/05/27 05:35:21 [notice] 1#1: start worker processes 2023/05/27 05:35:21 [notice] 1#1: start worker process 29 2023/05/27 05:35:21 [notice] 1#1: start worker process 30 2023/05/27 05:35:21 [notice] 1#1: start worker process 31 2023/05/27 05:35:21 [notice] 1#1: start worker process 32 [root@ke-edge1 ~]# 测试没有问题,到这里部署就成功了。 相关阅读
发表评论