1、vm上安装ubuntu、或centos(准备三个2核/2g/20g实例)
2、关闭selinux
3、关闭分区交换
swapoff -a #临时禁用
sed -i ‘s/.swap./#&/’ /etc/fstab #永久禁用
#内核参数调整
cat >> /etc/sysctl.d/k8s.conf<<EOF
vm.swappiness=0
EOF
sysctl -p /etc/sysctl.d/k8s.conf
4、安装iptables(参照官网配置)
5、配置ip、host、hostname
6、配置跨主机免密码认证
ssh-keygen -t ras
ssh-copy-id root@远程主机ip地址
7、配置yum源
8、安装docker
9、安装cri-dockerd
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.2/cri-dockerd-0.3.2.amd64.tgz
配置:
cat > /etc/systemd/system/cri-dockerd.service<<-EOF
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/local/bin/cri-dockerd --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9 --network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --cri-dockerd-root-directory=/var/lib/dockershim --docker-endpoint=unix:///var/run/docker.sock --cri-dockerd-root-directory=/var/lib/docker
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
startLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target
EOF
cat > /etc/systemd/system/cri-dockerd.socket <<-EOF
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service
[Socket]
ListenStream=/var/run/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
EOF
systemctl daemon-reload
systemctl enable cri-dockerd.service
systemctl restart cri-dockerd.service
10、安装kubeadm、kubectl、kubelet
yum install kubeadm kubectl kubelet
11、获取镜像文件
kubeadm config images list
images=$(kubeadm config images list --kubernetes-version=1.28.15 | awk -F "/" '{print $NF}')
for i in ${images}
do
docker pull registry.aliyuncs.com/google_containers/$i
done
master节点:
kubeadm init --kubernetes-version=1.28.15 --apiserver-advertise-address=192.168.252.100(填自己的) --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=“10.244.0.0/16” --service-cidr=“10.96.0.0/12” --ignore-preflight-errors=Swap --cri-socket=unix:///var/run/cri-dockerd.sock
从节点:
kubeadm join 192.168.252.100:6443 --token 1zk3de.o1dg26zr70mi2sdz(这里是填使用init命令生成的) --discovery-token-ca-cert-hash sha256:4bbfac042b7d585be87d0abfc14d86cdc25f8621fc097bd199a6cc9a63ab3052 --cri-socket=unix:///var/run/cri-dockerd.sock
master节点:
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown
(
i
d
−
u
)
:
(id -u):
(id−u):(id -g) $HOME/.kube/config
master节点kubectl命令补全设置
vi .bashrc
#设定命令符号
PS1=‘[[\e[31m]\u[\e[33m]@[\e[36m]\h [\e[32m]\w[\e[37m]]$[\e[m]’
source <(kubectl completion bash)
source <(kubeadm completion bash)
解决网络问题:
下载安装flannel
mkdir /data/kubernetes/network/flannel -p
cd /data/kubernetes/network/flannel
wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
备份yml文件
cp kube-flannel.yml{,.bak}
查看yml文件中的镜像文件配置
grep image: kube-flannel.yml
将对应的镜像文件下载到本地
docker pull …
将镜像上传到个人仓库(选做)
docker tag …
docker push…
运行yml
kubectl apply -f kube-flannel.yml
查看节点运行情况
kubectl get nodes
查看flannel pod运行情况
kubectl get pod -n kube-flannel
若pod status 为 CrashLoopBackOff时
执行kubectl logs -n kube-flannel 查看报错日志
若出现 No route to host
- 检查网络是否通畅
- 检查防火墙设置
- 检查k8s网络策略配置
- 检查Flannel网络查询是否正确安装和配置
- 检查kubelet监听的ip地址
若出现pod cidr not assigned - 检查cidr是否正确指派(主节点和从节点)
删除配置重置
master节点:
kubeadm reset
systemctl stop kubelet
systemctl stop docker
lsof -i :6443 #释放端口占用
lsof -i :10250 #释放端口占用
sudo rm -rf /etc/kubernetes/manifests/*.yaml
sudo rm -rf /var/lib/etcd
kubeadm init …
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
kubectl apply -f …
从节点:
sudo kubeadm reset
systemctl stop kubelet
systemctl stop docker
lsof -i :10250
lsof -i :10255
rm -rf /etc/cni/net.d
mount | grep ‘/var/lib/kubelet’ #查询被挂载占用的文件
umount xxx #卸载被挂载的文件
rm -rf /var/lib/kubelet
kubeadm join xxxxx
ps: kubelet、cri-dockerd、docker必须设置开机自启动