Kubernetes集群部署

三奇 关注

收藏于 : 2024-04-26 07:31   被转藏 : 1   

k8s基本部署要求

  1. 每个节点的时间必须同步。
  2. 要求各节点的防火墙必须关闭
  3. 禁用swap设备,k8s要求必须关闭swap,除非安装时强行忽略此错误
  4. 确保所有节点的ID为唯一的。

准备工作

一个Master节点,三个Worker节点.

HostName IP
k8s-master01 172.16.11.71
k8s-node01 172.16.11.81
k8s-node02 172.16.11.82
k8s-node03 172.16.11.83

部署Docker

kubeadm部署k8s要求所有主机上预先安装有docker环境。

安装Docker服务

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

启动docker并设置为开机启动

systemctl start docker && systemctl enable docker

注意:若IPtables规则在安装docker前没有清除,可以在安装完docker后清除规则然后重启docker服务。

修改cgoupfs为systemd

默认安装docker的cgroup dirve为cgroupfs ,需要将其改为systemd

cat << EOF >> /etc/docker/daemon.json
{
  "registry-mirrors": ["https://gy97ij1m.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

重启docker服务

systemctl daemon-reload
systemctl restart docker

部署k8s

部署k8s要求在各节点上部署以下组件:

  • master:kube-apiserver,kube-controller-manager,kube-scheduler,etcd
  • worker:kubelet,kube-proxy,docker

但是本次是以k8s官方提供的kubeadm来进行部署,kubeadm将每一个组件运行为pod的方式来部署,因此在master节点上也需要部署docker和kubelet。

所以每个节点都需要部署docker,kubelet,kubeadm。主节点上还需要部署kubectl。

配置阿里云k8s源

apt-get update && apt-get install -y apt-transport-https
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

查看所有版本的kubeadm

apt-cache madison kubeadm

选择出所要安装的版本,并安装

在所有节点上安装kubeadm、kubectl、kubelet

# 本次安装选择1.21.1-00版本进行安装
apt-get install kubeadm=1.21.2-00 kubectl=1.21.2-00 kubelet=1.21.2-00 -y
# 设置为开机启动
systemctl enable kubelet

初始化控制平面节点

安装完kubeadm后需要先对初始化集群的控制平面,但是在初始化之前,需要将所有节点注册到DNS中,确保主机名能被DNS解析,此处使用hosts文件直接做解析。

修改hosts文件

cat << EOF >> /etc/hosts
172.16.11.71 k8s-master01 kube-api
172.16.11.81 k8s-node01
172.16.11.82 k8s-node02
172.16.11.83 k8s-node03
EOF

初始化控制平面

使用kubeadm init初始化集群。

kubeadm init --apiserver-advertise-address=172.16.11.71 \
             --control-plane-endpoint=kube-api \
             --kubernetes-version=v1.21.2 \
             --pod-network-cidr=10.244.0.0/16 \
             --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers

# --image-repository:为指定镜像仓库
# --kubernetes-version:指定k8s的版本,版本需要和kubeadm版本一致
# --control-plane-endpoint:用来告诉所有客户端链接控制端时使用什么主机名。
# --apiserver-advertise-address:指定apiserver的地址和端口,端口不指定默认为6443
# --pod-network-cidr:用来指定哪段网络地址用来给容器内pod的网段地址。
# 不同的网络地址,其默认的地址也不一样。
# flannl: 默认10.244.0.0/16
# calico: 默认192.168.0.0/16

初始化集群会做很多步骤:

  1. preflight: 进行预检测,如果检测不通过操作将终止。
  2. 生成各种证书,每个组件相互间通信使用https进行。
  3. 生成kubeconfig配置文件。
  4. 启动kubelet。
  5. 创建控制平面。
  6. 上传配置
  7. 上传证书
  8. 生成引导令牌,以方便其他节点加入。

初始化控制平面后会生成以下信息

Your Kubernetes control-plane has initialized successfully!

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

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

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/

You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:
# 此为添加控制平面的命令
  kubeadm join kube-api:6443 --token 4oo3c2.ur24gwcotgi9pwt8 \
        --discovery-token-ca-cert-hash sha256:0a2facf32492adf109c3eb0d45fa03e27b080298e3ae7ee4ef7063052c8cd626 \
        --control-plane

Then you can join any number of worker nodes by running the following on each as root:
# 此为添加worker节点的命令
kubeadm join kube-api:6443 --token 4oo3c2.ur24gwcotgi9pwt8 \
        --discovery-token-ca-cert-hash sha256:0a2facf32492adf109c3eb0d45fa03e27b080298e3ae7ee4ef7063052c8cd626

按照所生成的提示信息操作

在用户家目录下创建出config

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

安装flannel网络插件

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

使用令牌将各work节点加入到k8s集群中

kubeadm join kube-api:6443 --token 4oo3c2.ur24gwcotgi9pwt8 \
        --discovery-token-ca-cert-hash sha256:0a2facf32492adf109c3eb0d45fa03e27b080298e3ae7ee4ef7063052c8cd626

查看各节点状态

root@k8s-master01:~# kubectl  get nodes
NAME           STATUS   ROLES                  AGE     VERSION
k8s-master01   Ready    control-plane,master   17m     v1.21.1
k8s-node01     Ready    <none>                 2m51s   v1.21.1
k8s-node02     Ready    <none>                 2m46s   v1.21.1
k8s-node03     Ready    <none>                 2m43s   v1.21.1
# 各节点STATUS状态均为Ready,k8s节点部署完毕。


 阅读文章全部内容  
点击查看
文章点评
相关文章
三奇 关注

文章收藏:2263

TA的最新收藏