kubeadm搭建k8s集群(CVM环境)

2022-10-02 15:45:36 浏览数 (1)

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端口都进行了开放

允许节点间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

0 人点赞