[TOC]
目录划分
- 下载软件存放目录
下载的软件统一下载到
/opt/xxx
- 安装目录
/usr/local/
k8s安装
机器划分
物理主机名 | ip地址 | 角色划分 |
---|---|---|
et2bq6si | 192.168.2.8 | worker |
69g95x44 | 192.168.2.9 | worker |
arhkma6i | 192.168.2.13 | master |
1. 修改host
# k8s hosts
192.168.2.8 k8s-node1
192.168.2.9 k8s-node2
192.168.2.13 k8s-master
2. 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 这个基本上不用操作
vim /etc/selinux/config
主要查看SELINUX=disabled,如果SELINUX=eabled 需要修改为disabled
3. 修改yum源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
4. yum安装
yum install -y kubelet-1.22.1 kubeadm-1.22.1 kubectl-1.22.1 --disableexcludes=kubernetes
# 设置 kubelet 开机启动
systemctl enable kubelet
5. 配置iptables
# 增加配置
# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
# 生效
sysctl -p
6. 安装etcd&flannel
#安装etcd和flannel(master上安装etcd+flannel,node上只安装flannel)
yum -y install etcd
// 不需要启动,k8s初始化的时候会自动启动
#systemctl start etcd
systemctl enable etcd
yum -y install flannel
7. 初始化集群
kubeadm init --kubernetes-version v1.22.1 --apiserver-advertise-address 192.168.2.13 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.233.0.0/16 --token-ttl 0
7.1 加入集群
kubeadm join 192.168.2.13:6443 --token 5ra5s6.lhommo04c0f1y5yt \
--discovery-token-ca-cert-hash sha256:b3c9be99406e2b71402d1b80ca68bb768542650c272330329b94862837a7b8a1
或者采用该命令获取
kubeadm token create --print-join-command
7.2 网络插件flannel安装
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl create -f kube-flannel.yml
8. 安装过程中遇到的问题
- etcd端口被占用,初始化的时候提示2379\2380端口被占用,
通过 lsof -i:2379检查发现是etcd,原来在刚刚安装的时候打开了etcd
[ERROR Port-2379]: Port 2379 is in use
[ERROR Port-2380]: Port 2380 is in use
解决, 关闭etcd
systemctl stop etcd
- 提示 /var/lib/etcd is not empty
[ERROR DirAvailable--var-lib-etcd]: /var/lib/etcd is not empty
rm /var/lib/etcd
- 初始化过程中拉取镜像超时,因为远方地址被墙了
#!/bin/bash
images=(
kube-apiserver:v1.22.1
kube-controller-manager:v1.22.1
kube-scheduler:v1.22.1
kube-proxy:v1.22.1
pause:3.5
etcd:3.5.0-0
coredns:v1.8.4
)
for imageName in ${images[@]} ; do
docker pull v5cn/$imageName
docker tag v5cn/$imageName k8s.gcr.io/$imageName
docker rmi v5cn/$imageName
done
docker tag k8s.gcr.io/coredns:v1.8.4 k8s.gcr.io/coredns/coredns:v1.8.4
dcoker rmi k8s.gcr.io/coredns:v1.8.4
通过以上sh来转换
- kubelet启动失败,ailed to run Kubelet: misconfiguration: kubelet cgroup driver: "systemd" is different from docker
journalctl -f -u kubelet
原因是k8s的cgroup默认是systemd,docker的默认是cgroupfs
修改docker的默认值
修改:/etc/docker/daemon.json(没有就新建)
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
# 重启docker
systemctl restart docker
- scheduler健康检查失败Get http://127.0.0.1:10252/healthz: dial tcp 127.0.0.1:10252: connect: connection refused
https://www.cnblogs.com/lfl17718347843/p/14191336.html
- coredns解析失败
关闭防火墙后成功
- 安装过程中因为配置的子网信息错误需要重新初始化
kubeadm reset 后可以再次执行init初始化的动作
- 子节点加入集群提示/proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
https://developer.aliyun.com/article/701252
- 当master节点重置后,在进行初始化,子节点使用命令加入不成功 Error getting node" err="node "k8s-node2" not found
需要对子节点进行kubeadm reset,后在进行加入集群
- 子节点加入集群后,发现对应的flannel proxy容器拉取失败
因为子节点中没有这几个镜像,就会从远端拉取,但是被墙了就获取不成功了,需要执行上面的sh方法拉取镜像
- master节点不能访问node节点的pod
检查flannel的网络端是否不一致
参考:https://zhuanlan.zhihu.com/p/368559385
- 重新初始化flannel网络
#第一步,在master节点删除flannel
kubectl delete -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#第二步,在node节点清理flannel网络留下的文件
ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
rm -rf /var/lib/cni/
rm -f /etc/cni/net.d/*
注:执行完上面的操作,重启kubelet
#第三步,kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#第四步 kubeadm reset 因为由于网络的不一样,可能会出现很多异常,如果出现了,最好重新初始化