0.环境说明
云服务器(CVM),腾讯云
ubuntu 18.04 环境
docker: 20.10.7
k8s: 1.23.3
节点 | 规格 |
---|---|
vm-0-19-ubuntu(172.17.0.19, 内网IP,主节点) | 2C4G |
vm-0-16-ubuntu(172.17.0.16, 内网IP) | 2C2G |
vm-0-18-ubuntu(172.17.0.18, 内网IP) | 2C2G |
k8s 官方要求每个节点必须在2C以上才能运行
1. 安装依赖
k8s需要不同节点之前的TCP连接,由于三个节点属于同一子网,我这里配置了三个节点之前的TCP连接
将三个节点之间的入站和出战的不同TCP端口都进行了开放
首先在主节点上配置
代码语言:shell复制# 0.进入root权限,便于后面的命令
# 设置root的密码,已有可以跳过
sudo passwd root
# 进入root
su root
# 1.关闭swap分区
swapoff -a
# 2.确保三个节点的时区一致
timedatectl
# 3.网络问题
sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo vi /etc/sysctl.d/10-network-security.conf
## 添加以下两行配置
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1
sudo sysctl --system
# 4.安装 docker
apt-get install docker.io
#调整cgroup驱动
sudo vi /etc/docker/daemon.json
## 添加以下配置,也可以考虑将镜像源也加一下
{
"exec-opts": ["native.cgroupdriver=systemd"],
}
sudo systemctl restart docker
# 5.安装 k8s组件
apt-get update && apt-get install -y apt-transport-https curl
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
sudo tee /etc/apt/sources.list.d/kubernetes.list <<EOF
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
sudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl && sudo apt-mark hold kubelet kubeadm kubectl
# 6. 启动main节点
# 172.16.0.0/16 必须和 云服务器的私有网络(IPv4 CIDR)不一样
# 我的私有网络是 172.17.0.0/16
kubeadm init --pod-network-cidr 172.16.0.0/16
--apiserver-advertise-address=172.17.0.19
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers
# 7. 退出root模式,并将配置文件加入
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 8. 配置k8s网络
# 默认情况下 master节点不能部署非system类型的pod,这里通过taint来允许这样的行为
kubectl taint nodes --all node-role.kubernetes.io/master-
# 从 https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 下载为flannel.yaml
# 将
# net-conf.json: |
# {
# "Network": "10.244.0.0/16",
# "Backend": {
# "Type": "vxlan"
# }
# }
# 中的10.244.0.0/16改为172.16.0.0/16
kubectl apply -f flannel.yaml
kubectl get nodes
# 如果 发现主节点是Ready,证明配置成功
# NAME STATUS ROLES AGE VERSION
# vm-0-19-ubuntu Ready control-plane,master 15m v1.23.3
2. 添加节点 与重启
子节点通过一行命令就可以添加成功,这些节点在运行kubeadm join之前需要执行上小节中0到5的内容,
主节点在kubeadm init后会打印一条kubeadm join的命令,直接在子节点运行即可
代码语言:shell复制kubeadm join 172.17.0.19:6443 --token rneqy1.mn1viwqrwgj56vrt
--discovery-token-ca-cert-hash sha256:0353c937fe38ee836203d0720255a8168136a44e335e3cf5ff1abc7e49d0a872
# 添加节点之后在主节点运行kubectl get nodes发现Ready的新节点就说明
重启:
代码语言:shell复制# 所有节点在kubeadm reset 之后还需要以下几行命令
echo y | kubeadm reset
rm -f /etc/kubernetes/manifests/*
rm -rf /var/lib/etcd/*
ip link set cni0 down
ip link delete cni0
systemctl restart containerd && systemctl restart kubelet
部分参考
https://segmentfault.com/a/1190000040780446