文档简介:
操作场景
配置环境
主机名
|
角色
|
IP 地址
|
服务
|
配置
|
VM-0-9-centos
|
云端
|
VM-0-9-centos 内网 IP
VM-0-9-centos 公网 IP
|
kuberbetes、docker、cloudcore
|
操作系统:Centos 7.4
CPU:Intel Xeon Cascade Lake(2.5 GHz)
RAM:80GB
GPU:NVIDIA T4
|
berbai02
|
边端
|
berbai02 内网 IP
|
docker、edgecore
|
操作系统:Ubuntu 18.04.6 LTS
CPU:ARMv8 Processor rev 1 (v8l)
RAM:4GB
GPU:128CUDA core Maxwell
|
|
demo
|
边端
|
demo 内网 IP
|
docker、edgecore
|
操作步骤
安装驱动
安装依赖包
sudo yum install -y dkms gcc kernel-devel yum-utils
# 检查是否已经安装dkmsrpm -qa | grep -i dkms
# 检查是否安装kernel-develrpm -qa | grep kernel-devel
# 检查是否安装GCCrpm -qa | grep gcc
# 检查是否安装yum-utilsrpm -qa | grep yum-utils

下载驱动


wget https://us.download.nvidia.com/tesla/510.47.03/NVIDIA-Linux-x86_64-510.47.03.run
安装驱动
chmod +x NVIDIA-Linux-x86_64-510.47.03.run
sudo sh NVIDIA-Linux-x86_64-510.47.03.run
nvidia-smi

安装 KubeEdge
安装前准备
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
sed -ri 's/.*swap.*/#&/' /etc/fstab
reboot
安装 Docker
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum install docker-ce docker-ce-cli containerd.io
systemctl start docker
systemctl enable docker
docker version
docker run hello-world
docker images

部署 Kubernetes
cat <<EOF > /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=1repo_gpgcheck=1gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF
yum makecache
yum install -y kubelet kubeadm kubectl ipvsadm
yum install kubelet-1.17.0-0.x86_64 kubeadm-1.17.0-0.x86_64 kubectl-1.17.0-0.x86_64
cat <<EOF > /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1vm.swappiness=0EOF
# 加载所有的 sysctl 配置sysctl --systemmodprobe br_netfiltersysctl -p /etc/sysctl.d/k8s.conf
# 加载ipvs相关内核模块# 如果重新开机,需要重新加载(可以写在 /etc/rc.local 中开机自动加载)modprobe ip_vsmodprobe ip_vs_rrmodprobe ip_vs_wrrmodprobe ip_vs_shmodprobe nf_conntrack_ipv4
# 查看是否加载成功lsmod | grep ip_vs
kubeadm config images list
k8s.gcr.io/kube-apiserver:v1.23.5k8s.gcr.io/kube-controller-manager:v1.23.5k8s.gcr.io/kube-scheduler:v1.23.5k8s.gcr.io/kube-proxy:v1.23.5k8s.gcr.io/pause:3.6k8s.gcr.io/etcd:3.5.1-0k8s.gcr.io/coredns/coredns:v1.8.6
kubeadm config images pull
docker images
[root@VM-0-9-centos ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEk8s.gcr.io/kube-apiserver v1.23.5 3fc1d62d6587 4 weeks ago 135MBk8s.gcr.io/kube-proxy v1.23.5 3c53fa8541f9 4 weeks ago 112MBk8s.gcr.io/kube-controller-manager v1.23.5 b0c9e5e4dbb1 4 weeks ago 125MBk8s.gcr.io/kube-scheduler v1.23.5 884d49d6d8c9 4 weeks ago 53.5MBk8s.gcr.io/etcd 3.5.1-0 25f8c7f3da61 5 months ago 293MBk8s.gcr.io/coredns 1.8.6 a4ca41631cc7 6 months ago 46.8MBhello-world latest feb5d9fea6a5 6 months ago 13.3kBk8s.gcr.io/pause 3.6 6270bb605e12 7 months ago 683kB
配置 Kubelet(可选)
DOCKER_CGROUPS=$(docker info | grep 'Cgroup' | cut -d' ' -f4)echo $DOCKER_CGROUPS
cat >/etc/sysconfig/kubelet<<EOFKUBELET_EXTRA_ARGS="--cgroup-driver=$DOCKER_CGROUPS --pod-infra-container-image=k8s.gcr.io/pause:3.1"EOF
systemctl daemon-reload
systemctl enable kubelet && systemctl start kubelet
初始化集群
参数
|
说明
|
--apiserver-advertise-address
|
master 和 worker 间能互相通信的 IP
|
--kubernetes-version
|
指定版本
|
--token-ttl=0
|
token 永不过期
|
--apiserver-cert-extra-sans
|
节点验证证书阶段忽略错误
|
kubeadm init --kubernetes-version=v1.23.5 \--pod-network-cidr=10.244.0.0/16 \--apiserver-advertise-address= <VM-0-9-centos 内网 IP> \--ignore-preflight-errors=Swap[root@VM-0-9-centos ~]# kubeadm init --kubernetes-version=v1.23.5 \> --pod-network-cidr=10.244.0.0/16 \> --ignore-preflight-errors=Swap[init] Using Kubernetes version: v1.23.5...Your Kubernetes control-plane has initialized successfully!To start using your cluster, you need to run the following as a regular user:mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configAlternatively, if you are the root user, you can run:export KUBECONFIG=/etc/kubernetes/admin.confYou should now deploy a pod network to the cluster.Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:https://kubernetes.io/docs/concepts/cluster-administration/addons/Then you can join any number of worker nodes by running the following on each as root:kubeadm join <VM-0-9-centos 内网 IP>:6443 --token 1tyany.dxr5ymxu2g3j0dzl \--discovery-token-ca-cert-hash sha256:a63bd724813ebe0c4aabadb8cc8c747b6c84c474b80d4104497542ec265ec36a
配置 kubectl
rm -rf $HOME/.kube
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
查看 node 节点
kubectl get node
NAME STATUS ROLES AGE VERSIONvm-0-9-centos NotReady control-plane,master 21m v1.23.5
配置网络插件 flannel(可选)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl get node -owide
kubectl get pods -n kube-system
kubectl get svc
[root@VM-0-9-centos ~]# kubectl get node -owideNAME STATUS ROLES AGE VERSIONvm-0-9-centos NotReady control-plane,master 31m v1.23.5[root@VM-0-9-centos ~]# kubectl get pods -n kube-systemNAME READY STATUS RESTARTS AGEcoredns-64897985d-9hfz2 0/1 Pending 0 31mcoredns-64897985d-9hr2z 0/1 Pending 0 31metcd-vm-0-9-centos 1/1 Running 0 31mkube-apiserver-vm-0-9-centos 1/1 Running 0 31mkube-controller-manager-vm-0-9-centos 1/1 Running 3 31mkube-flannel-ds-t4k2w 0/1 Init:ImagePullBackOff 0 50skube-proxy-c6mck 1/1 Running 0 31mkube-scheduler-vm-0-9-centos 1/1 Running 4 31m[root@VM-0-9-centos ~]# kubectl get svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP 10.96.0.1 <none> 443/TCP 32m
配置 iptables 转发 IP
sudo iptables -t nat -A OUTPUT -d <主节点公网IP> -j DNAT --to-destination <主节点内网IP>
# cloudsudo iptables -t nat -A OUTPUT -d <VM-0-9-centos 公网 IP> -j DNAT --to-destination <VM-0-9-centos 内网 IP>
sudo iptables -t nat -A OUTPUT -d <VM-0-9-centos 内网 IP> -j DNAT --to-destination <VM-0-9-centos 公网 IP>
# edgesudo iptables -t nat -A OUTPUT -d <VM-0-9-centos 内网 IP> -j DNAT --to-destination <VM-0-9-centos 公网 IP>
安装 KubeEdge
配置 Cloud
wget https://golang.google.cn/dl/go1.18.1.linux-amd64.tar.gz
tar -zxvf go1.18.1.linux-amd64.tar.gz -C /usr/local
cat >> /etc/profile << EOF# golang envexport GOROOT=/usr/local/goexport GOPATH=/data/gopathexport PATH=$PATH:$GOROOT/bin:$GOPATH/binEOF
mkdir -p /data/gopath && cd /data/gopath
mkdir -p src pkg bin
source /etc/profile
yum install git
git clone https://github.com/kubeedge/kubeedge $GOPATH/src/github.com/kubeedge/kubeedge
部署 cloudcore
cd $GOPATH/src/github.com/kubeedge/kubeedge
make all WHAT=keadm
cd ./_output/local/bin
./keadm init --advertise-address="<VM-0-9-centos 内网 IP>"
[root@VM-0-9-centos kubeedge]# ./keadm init --advertise-address="<VM-0-9-centos 内网 IP>"Kubernetes version verification passed, KubeEdge installation will start......KubeEdge cloudcore is running, For logs visit: /var/log/kubeedge/cloudcore.logCloudCore started
systemctl status cloudcore.service
配置 Edge
uname -a
wget https://golang.google.cn/dl/go1.18.1.linux-armv6l.tar.gz
tar -zxvf go1.18.1.linux-armv6l.tar.gz -C /usr/local
cat >> /home/pi/.bashrc << EOF# golang envexport GOROOT=/usr/local/goexport GOPATH=/data/gopathexport PATH=$PATH:$GOROOT/bin:$GOPATH/binEOF
source /home/pi/.bashrc
yum install git
git clone https://github.com/kubeedge/kubeedge $GOPATH/src/github.com/kubeedge/kubeedge
./keadm gettoken
b6107885645ec34725a76e7cf3fd9d8bf130dfa5e6f37d4c51b6bc1bee49cd48.eyJhbGciOiJIUz
I1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NTA2MjE0MDR9.ZMtQnF_oWYG4pijYO-SaxVtUYhHQSuCIauf5iWFkNMY
cd $GOPATH/src/github.com/kubeedge/kubeedge
make all WHAT=keadm
cd ./_output/local/bin
./keadm join --cloudcore-ipport=<VM-0-9-centos 内网 IP>:10000 --token=9c71cbbb512afd65d
a8813fba9a48d19ab8602aa27555af7a07cd44b508858ae.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJleHAiOjE2NTA3MDgwNjN9.-S0YBgSSAz6loQsi0XaTgFeWyHsHDm8E2SAefluVTJA
Host has /usr/sbin/mosquitto already installed and running. Hence skipping the installation steps !!!...KubeEdge edgecore is running, For logs visit: journalctl -u edgecore.service -xe
[root@VM-0-9-centos bin]# kubectl get nodeNAME STATUS ROLES AGE VERSIONberbai02 Ready agent,edge 32m v1.22.6-kubeedge-v1.10.0demo Ready agent,edge 34m v1.22.6-kubeedge-v1.10.0vm-0-9-centos Ready control-plane,master 27h v1.23.5[root@VM-0-9-centos bin]# kubectl get pods -n kube-systemNAME READY STATUS RESTARTS AGEcoredns-64897985d-9hfz2 1/1 Running 2 (69m ago) 27hcoredns-64897985d-9hr2z 1/1 Running 2 (69m ago) 27hetcd-vm-0-9-centos 1/1 Running 2 (69m ago) 27hkube-apiserver-vm-0-9-centos 1/1 Running 2 (69m ago) 27hkube-controller-manager-vm-0-9-centos 1/1 Running 13 (69m ago) 27hkube-flannel-ds-hsss5 0/1 Error 10 (2m23s ago) 34mkube-flannel-ds-qp6xj 0/1 Error 9 (4m46s ago) 36mkube-flannel-ds-t4k2w 1/1 Running 2 (69m ago) 27hkube-proxy-6qcfb 0/1 ContainerCreating 0 34mkube-proxy-c6mck 1/1 Running 2 (69m ago) 27hkube-proxy-hvpz9 1/1 Running 0 36mkube-scheduler-vm-0-9-centos 1/1 Running 14 (69m ago) 27h
云边协同实例
git clone https://github.com/kubeedge/examples.git $GOPATH/src/github.com/kubeedge/examples
cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/crds
kubectl create -f kubeedge-counter-model.yaml
cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/crds
# 替换 "demo" 为您的 edge 节点名称sed -i "s#edge-node#demo#" kubeedge-counter-instance.yaml
kubectl create -f kubeedge-counter-instance.yaml
cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/web-controller-app
sed -i "s#80#8989#" main.go
make
make docker
cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/crds
kubectl create -f kubeedge-web-controller-app.yaml
cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/counter-mapper
make
make docker
cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/crds
kubectl create -f kubeedge-pi-counter-app.yaml
docker save -o kubeedge-pi-counter.tar kubeedge/kubeedge-pi-counter:v1.0.0
scp kubeedge-pi-counter.tar root@<demo 内网 IP>:/root
docker load -i kubeedge-pi-counter.tar
[root@VM-0-9-centos crds]# kubectl get pods -o wideNAME READY STATUS RESTARTS AGE IP
NODE NOMINATED NODE READINESS GATES
kubeedge-counter-app-55848d84d9-545kh 1/1 Running 0 27m <VM-0-9-centos 内网 IP>
vm-0-9-centos <none> <none>
kubeedge-pi-counter-54b7997965-t2bxr 1/1 Running 0
31m <demo 内网 IP> demo <none> <none>
# 修改 counter-container-id 为kubeedge-pi-counter容器iddocker logs -f counter-container-id


# 修改 counter-container-id 为kubeedge-pi-counter容器iddocker logs -f counter-container-id
