《Kubernetes从入门到进阶》之三:部署集群 部署工具kubeadm
  ETWZF7L1nsXD 2023年11月02日 40 0

要想快速学习Kubernetes,最好的方法就是自己动手搭建一个测试集群,进行实践。

本文我们将基于Kubernetes的部署工具kubeadm,来学习如何搭建一个集群。


01

系统环境

1. Kubernetes版本

Kubernetes 版本以 x.y.z 表示,其中 x 是主要版本, y 是次要版本,z 是补丁版本,遵循语义版本控制术语。Kubernetes 社区大约会每隔四个月发布次要版本,社区对于每个版本的支持周期为12个月。

此处我们选择使用较新的1.24.x版本来进行部署演示。

2. 容器运行时

在1.24.x版本中,Kubernetes正式放弃了对dockershim的支持,这也标志着其与Docker的分割。从这个版本开始,我们将无法直接在Kubernetes中使用Docker。

对此,本文将不采用Docker方案,而是以目前主流的Containerd做为容器运行时。

3. 主机环境 

在机器配置上,Master节点至少要2 Core和4GB内存,推荐配置是4 Core和16GB。而工作节点则应根据需要运行的业务容器情况进行配置,但通常不少于4 core和16GB内存。

操作系统方面支持Ubuntu、CentOS、RedHat、Debian等常规系统,内核版本要求不低于3.10。

本次演示的节点为一台Master+两台Worker节点的三主机模式,信息如下:

IP地址

主机名

角色

系统版本

192.168.214.10

k8s-master

Master

Ubuntu 20.04 LTS

192.168.214.21

k8s-node1

Worker

Ubuntu 20.04 LTS

192.168.214.22

k8s-node2

Worker

Ubuntu 20.04 LTS


02

初始化设置

在开始部署kubernetes集群前,要先在所有节点上进行初始化工作。

相关步骤如下:

1. 配置hosts文件

192.168.214.10 k8s-master
192.168.214.21 k8s-node1
192.168.214.22 k8s-node2

2. 配置时间同步

$ sudo apt install chrony
$ sudo systemctl start chronyd

3. 禁用Swap

$ sudo swapoff -a  #临时禁用
$ sudo sed -i.bak '/swap/s/^/#/' /etc/fstab  #永久禁用

使用free -m 可以检查是否生效,正常会看到swap已经为0。

$ free -m
              total        used        free      shared  buff/cache   available
Mem:           3901         320        2673           1         907        3340
Swap:             0           0           0

4. 配置内核参数,用于将桥接的IPv4流量传递到iptables的链

$ sudo tee /etc/modules-load.d/k8s.conf<<EOF
overlay
br_netfilter
EOF

$ sudo modprobe overlay
$ sudo modprobe br_netfilter

$ cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

$ sudo sysctl --system

运行下列命令确认br_netfilter 和 overlay 模块已被加载。

$ lsmod | grep br_netfilter
$ lsmod | grep overlay

运行以下命令确认相关参数已被设置为1。

$ sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward


03

安装组件

1. 更新apt源,安装必要软件包

$ sudo apt update
$ sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates

2. 配置仓库

由于ubuntu默认源的版本较低,需要从docker官方仓库安装最新版本。

添加Docker官方证书,用于验证程序包签名。

$ curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

添加稳定版本的Docker-CE仓库,由于是国内环境,此处使用阿里云镜像仓库。

$ sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

3. 安装containerd

更新仓库索引并安装containerd

$ sudo apt update
$ sudo apt install -y containerd.io

生成默认配置文件

$ containerd config default | sudo tee /etc/containerd/config.toml

修改/etc/containerd/config.toml配置文件

[plugins."io.containerd.grpc.v1.cri"]
  sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.6"  #改用阿里云仓库镜像
...
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
  ...
  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
    SystemdCgroup = true   # 改为true

启动containerd

$ sudo systemctl start containerd
$ sudo systemctl enable containerd


4. 安装kubelet、kubeadm和kubectl

kubelet是运行在每个节点上的代理服务,kubeadm是集群安装工具,kubectl是集群管理客户端。

在安装前需要先添加Kubernetes仓库,由于国内网络问题,此处还是使用阿里云镜像库。

$ curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
$ sudo apt-add-repository "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main"

安装程序

$ sudo apt update
$ sudo apt install -y kubelet=1.24.10-00 kubeadm=1.24.10-00 kubectl=1.24.10-00
# 锁定版本,不自动更新
$ sudo apt-mark hold kubelet kubeadm kubectl


04

创建集群

我们在Master主机上执行下列命令,进行集群的初始化工作。

1. 初始化集群

sudo kubeadm init \
    --image-repository registry.aliyuncs.com/google_containers \
    --kubernetes-version v1.24.10 \
    --control-plane-endpoint 192.168.214.10 \
    --apiserver-advertise-address 192.168.214.10 \
    --pod-network-cidr 10.244.0.0/16

注释:--image-repository 指定要使用的镜像仓库,此处指定阿里云仓库;--kubernetes-version 指定Kubernetes版本;--control-plane-endpoint 指定控制平面的访问端点,可以是IP或DNS名称;--apiserver-advertise-address 指定kube apiserver的地址端口,如果有多台Master节点,则配置为负载均衡地址;--pod-network-cidr指定Pod网段。

2. 当初始化完成后,可以看到如下内容的成功提示:

复制并保存关于kubeadm join 的命令,用于后面加入Worker节点到集群。

...
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


...
Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.214.10:6443 --token 8sqxa4.9h7zsfiz9u7r3luz \
        --discovery-token-ca-cert-hash sha256:303f0532a0a211183c8382f72ecbb2e93e871a55cc6f6d8e1c286cd34e545dc4

3. 配置集群操作文件

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

现在我们可以使用kubectl 来管理Kubernetes集群,运行kubectl get nodes 查看节点状态。

$ kubectl get nodes
NAME         STATUS     ROLES           AGE   VERSION
k8s-master   NotReady   control-plane   17m   v1.24.10

此时,我们可以看到该节点为NotReady状态,这是因为还有没有部署网络插件的缘故。上一文中我们有说过,网络插件需要在部署过程中手动安装。

4. 安装网络插件

目前,Kubernetes流行的网络插件有Flannel、Calico等,此处安装 Flannel。

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



可使用kubectl get pod 查看flannel的pod状态,等安装完成后会变成Running状态。

$ kubectl  get pod -n kube-flannel
NAME                    READY   STATUS    RESTARTS   AGE
kube-flannel-ds-4k4pt   1/1     Running   0          3m19s


此时,再查看node节点,可看到状态也恢复 。

$ kubectl  get nodes
NAME         STATUS     ROLES           AGE   VERSION
k8s-master   NotReady   control-plane   37m   v1.24.10


05

添加工作节点

现在,我们可以将其他两个节点做为Worker节点添加到集群中。

在每个节点上运行如下命令:

$ sudo kubeadm join 192.168.214.10:6443 --token 8sqxa4.9h7zsfiz9u7r3luz \
        --discovery-token-ca-cert-hash sha256:303f0532a0a211183c8382f72ecbb2e93e871a55cc6f6d8e1c286cd34e545dc4

稍等一会,然后用命令kubectl get nodes 查看节点状态,可看到节点已经正常运行。

$ kubectl get nodes
NAME         STATUS   ROLES           AGE     VERSION
k8s-master   Ready    control-plane   126m    v1.24.10
k8s-node1    Ready    <none>          11m     v1.24.10
k8s-node2    Ready    <none>          8m55s   v1.24.10

当做完这一步时,恭喜你已经成功搭建了一套集群,这是个好的开始。后面,我们的所有功能演示都会在这个集群上进行。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  wwLZeziuqjLR   2023年12月11日   33   0   0 Dockercentos
  MCWYWqSAMsot   2023年12月11日   35   0   0 Docker
  LE2wsiBPlOhg   2023年12月06日   33   0   0 Dockercentos
  DnoStTHsc0vp   2023年12月11日   30   0   0 Docker
  wwLZeziuqjLR   2023年12月08日   105   0   0 Dockercentosbash
  wwLZeziuqjLR   2023年12月07日   37   0   0 Dockercentos
ETWZF7L1nsXD