提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
部署有问题的话,评论区直接说,我也是小白
一、k8s部署(主节点,从节点配置)
虚拟机配置ubutun18.04
软件vim下载
apt install vim
虚拟机IP网址固定
gedit /etc/netplan/01-network-manager-all.yaml
这里是ubutu18.04 网址固定
network:
version: 2
ethernets:
ens33: # 网卡名称
dhcp4: no
addresses:
- 192.168.182.178/24 # ip地址
gateway4: 192.168.182.2 # 网关
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
然后
netplan apply
试一下百度能通吗如果报错网络设置有错
ping www.baidu.com
修改虚拟机名字
gedit /etc/hostname
禁用永久禁用SELinux
SELINUX=disabled
关闭swap
sudo swapoff -a
sudo sed -i '/swap/s/^/#/' /etc/fstab
开启6443端口
ufw allow 6443
查看防火墙状态
sudo ufw status
开启IPv4转发
sudo cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
sudo cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
设置时间同步
选择 Asia ShangHai
sudo dpkg-reconfigure tzdata
安装Docker
sudo apt-get update
sudo apt-get -y install docker.io
修改docker启动项:
sudo mkdir /etc/docker
sudo gedit /etc/docker/daemon.json
选择相面镜像,有时候镜像拉不下来 换下镜像源
{
"exec-opts": ["native.cgroupdriver=systemd"],
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": true,
"features": {
"buildkit": true
},
"registry-mirrors": [
"https://ghcr.ikubernetes.xyz",
"https://cloudsmith.ikubernetes.xyz",
"https://docker.ikubernetes.xyz",
"https://quey.ikubernetes.xyz",
"https://gcr.ikubernetes.xyz",
"https://k8s-gcr.ikubernetes.xyz",
"https://k8s..ikubernetes.xyz"
],
"data-root": "/var/lib/docker",
"log-driver": "json-file",
"log-opts": {
"max-size": "500m",
"max-file": "60"
}
}
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc"
重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker
查看docker版本和状态
sudo docker version
sudo systemctl status docker
安装cri-dockerg 官网https://github.com/Mirantis/cri-dockerd/releases
选择一个版本
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.15/cri-dockerd_0.3.15.3-0.ubuntu-bionic_amd64.deb
sudo dpkg -i cri-dockerd_0.3.15.3-0.ubuntu-bionic_amd64.deb
调整启动参数
sudo sed -i -e 's#ExecStart=.*#ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.8#g' /lib/systemd/system/cri-docker.service
设置开机自启动
sudo systemctl daemon-reload
sudo systemctl enable cri-docker
查看cri-docker状态
sudo systemctl status cri-docker
安装kubelet(主节点)
下载一些网络插件
sudo apt-get update && sudo apt-get install -y apt-transport-https
apt install curl
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
apt-get install kubelet kubeadm kubectl
安装指定版本
apt install kubelet=1.28.2-00 kubectl=1.28.2-00 kubeadm=1.28.2-00
防止自动更新
sudo apt-mark hold kubelet kubeadm kubectl
sudo mkdir /etc/sysconfig
sudo gedit /etc/sysconfig/kubelet
在里面添加内容
KUBELET_KUBEADM_ARGS="--container-runtime=remote --container-runtime-endpoint=/run/cri-dockerd.sock
启动kubelet
sudo systemctl enable --now kubelet
主节点初始化查看初始化的镜像
sudo kubeadm config images list --image-repository registry.aliyuncs.com/google_containers
拉取镜像
sudo kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers --cri-socket unix:///run/cri-dockerd.sock
初始化 主机IP地址换成自己的 kubelet 换成自己的版本这里是1.28.2
kubeadm init --control-plane-endpoint=192.168.74.140 --kubernetes-version=v1.28.2 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --token-ttl=0 --cri-socket unix:///run/cri-dockerd.sock --upload-certs --image-repository registry.aliyuncs.com/google_containers
初始化成功后
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You 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 192.168.0.5:6443 --token rt0fpo.4axz6.....m1ihf \
--discovery-token-ca-cert-hash sha256:ac20e89e8bf43b56......516a41305c1c1fd5c7
看到三行代表初始化成功,在root环境下然后运行这三条指令
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
然后部署网络插件这里是flannel(有时候镜像拉不下来)可以单独把镜像拉下来
wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
下载后
kubectl apply -f kube-flannel.yml
有时镜像会出现 拉不下来,导致 节点not ready 可以选择三方镜像源
二、kubeedge部署
1.离线部署(master和node节点都要安装)(1和2选择其中一个)
代码如下(示例):
wget https://github.com/kubeedge/kubeedge/releases/download/v1.17.0/keadm-v1.17.0-linux-amd64.tar.gz
tar -zxvf keadm-v1.17.0-linux-amd64.tar.gz
cp keadm-v1.17.0-linux-amd64/keadm/keadm /usr/local/bin/keadm
root@master:~# kubectl describe nodes master | grep Taints
Taints: node-role.kubernetes.io/control-plane:NoSchedule
root@master:~# kubectl taint node master node-role.kubernetes.io/control-plane:NoSchedule-
node/master untainted
node-role.kubernetes.io/control-plane:NoSchedule 表示有污点
untainted表示污点已清除
kubectl taint node master node-role.kubernetes.io/control-plane:NoSchedule-
2.docker容器化部署
以kubeedge 1.17.0为例 运行不成功 镜像源的原因,拉去不下来镜像
运行下面代码之前,一定要清除主节点污点,
root@master:~# kubectl describe nodes master | grep Taints
Taints: node-role.kubernetes.io/control-plane:NoSchedule
root@master:~# kubectl taint node master node-role.kubernetes.io/control-plane:NoSchedule-
node/master untainted
node-role.kubernetes.io/control-plane:NoSchedule 表示有污点
untainted表示污点已清除
kubectl taint node master node-role.kubernetes.io/control-plane:NoSchedule-
docker run --rm kubeedge/installation-package:v1.17.0 cat /usr/local/bin/keadm > /usr/local/bin/keadm && chmod +x /usr/local/bin/keadm
3主节点初始化
keadm init --advertise-address="THE-EXPOSED-IP" --kubeedge-version=v1.17.0 --kube-config=/root/.kube/config
成功加载后会有一个界面。云端节点以运行或者可以查看pod 看下云节点pod是否在运行。
4.打标签(master节点)
后面为了防止flanne kube-proxy 调度到边节点 要打标签
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 kube-flannel |grep -v NAME |awk '{print $1}' | xargs -n 1 kubectl patch daemonset -n kube-flannel --type='json' -p='[{"op": "replace","path": "/spec/template/spec/affinity","value":{"nodeAffinity":{"requiredDuringSchedulingIgnoredDuringExecution":{"nodeSelectorTerms":[{"matchExpressions":[{"key":"node-role.kubernetes.io/edge","operator":"DoesNotExist"}]}]}}}}]'
主节点已部署好
三、edge节点部署
1.边缘节点部署
在此之前 边节点已部署好 docker 与cri -docker (如果没有加入成功)看下面注意事项
keadm reset && rm -rf /etc/kubeedge/ && keadm join --remote-runtime-endpoint=unix:///var/run/cri-dockerd.sock --cloudcore-ipport=192.168.229.4:10000 --token=4fbd4f656d8ff66d0a1bf77e59d74d005509104b78db52da13cc8c81d9957332.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MzQwNzI1MjN9.wXjADn1Lgpqyr6pW_SXJH_lMlIk3abte5gAUyoqfKG0 --kubeedge-version=1.17.0
2.注意
加入边节点前 如果你这台虚拟机此前部署kubelet
1.查看kube-proxy的进程
netstat -tulp
然后杀死进程号kube-proxy
kill -9 进程号pid
然后加入边缘节点
keadm reset && rm -rf /etc/kubeedge/ && keadm join --remote-runtime-endpoint=unix:///var/run/cri-dockerd.sock --cloudcore-ipport=192.168.229.4:10000 --token=4fbd4f656d8ff66d0a1bf77e59d74d005509104b78db52da13cc8c81d9957332.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MzQwNzI1MjN9.wXjADn1Lgpqyr6pW_SXJH_lMlIk3abte5gAUyoqfKG0 --kubeedge-version=1.17.0 --with-mqtt
加入节点后,边缘节点会not ready 那是边缘节点CNI插件未安装
这里有官网地址https://github.com/containernetworking/plugins/releases
wget https://github.com/containernetworking/plugins/releases/download/v1.6.0/cni-plugins-linux-amd64-v1.6.0.tgz
mkdir -p /opt/cni/bin
tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.6.0.tgz
mkdir -p /etc/cni/net.d/
cat >/etc/cni/net.d/10-containerd-net.conflist <<EOF
{
"cniVersion": "1.0.0",
"name": "containerd-net",
"plugins": [
{
"type": "bridge",
"bridge": "cni0",
"isGateway": true,
"ipMasq": true,
"promiscMode": true,
"ipam": {
"type": "host-local",
"ranges": [
[{
"subnet": "10.88.0.0/16"
}],
[{
"subnet": "2001:db8:4860::/64"
}]
],
"routes": [
{ "dst": "0.0.0.0/0" },
{ "dst": "::/0" }
]
}
},
{
"type": "portmap",
"capabilities": {"portMappings": true}
}
]
}
EOF
重启dockers cri-docker edgecore
systemctl restart docker
systemctl restart cri-docker
systemctl restart edgecore
此时node节点就ready了
但kubectl logs pod 还没有还需要进一步配置;