共计 4381 个字符,预计需要花费 11 分钟才能阅读完成。
本文将向您展现如何应用 kubeadm 命令在 Ubuntu 22.04 上装置 Kubernetes 集群。
Kubernetes 是一个收费的开源容器编排工具,也称为 K8S。在 Kubernetes 的帮忙下,咱们能够实现主动部署,容器应用程序的缩放和治理。
Kubernetes 集群由主节点 (用于治理集群中的工作节点和 pod),工作节点 (用于部署应用程序) 组成。
在本指南中,咱们应用一个主节点和两个工作节点。各节点的零碎要求如下
- Minimal install Ubuntu 22.04
- Minimum 2GB RAM or more
- Minimum 2 CPU cores / or 2 vCPU
- 20 GB free disk space on /var or more
- Sudo user with admin rights
- Internet connectivity on each node
试验设置
- Master Node: 192.168.1.173 – k8smaster.example.net
- First Worker Node: 192.168.1.174 – k8sworker1.example.net
- Second Worker Node: 192.168.1.175 – k8sworker2.example.net
(1) 设置主机名并在 hosts 文件中增加条目
登录到 master 节点并应用 hostnamectl 命令设置 hostname
$ sudo hostnamectl set-hostname "k8smaster.example.net" | |
$ exec bash |
在 worker 节点上,运行以下命令
$ sudo hostnamectl set-hostname "k8sworker1.example.net" // 1st worker node | |
$ sudo hostnamectl set-hostname "k8sworker2.example.net" // 2nd worker node | |
$ exec bash |
在每个节点上的 /etc/hosts 文件中增加以下内容
192.168.1.173 k8smaster.example.net k8smaster | |
192.168.1.174 k8sworker1.example.net k8sworker1 | |
192.168.1.175 k8sworker2.example.net k8sworker2 |
(2) 禁用 swap & 增加内核设置
在所有节点上,执行上面的 swapoff 和 sed 命令禁用替换性能
$ sudo swapoff -a | |
$ sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab |
在所有节点上加载以下内核模块
$ sudo tee /etc/modules-load.d/containerd.conf <<EOF | |
overlay | |
br_netfilter | |
EOF | |
$ sudo modprobe overlay | |
$ sudo modprobe br_netfilter |
为 Kubernetes 设置以下内核参数,运行如下的 tee 命令
$ sudo tee /etc/sysctl.d/kubernetes.conf <<EOF | |
net.bridge.bridge-nf-call-ip6tables = 1 | |
net.bridge.bridge-nf-call-iptables = 1 | |
net.ipv4.ip_forward = 1 | |
EOF |
从新加载上述更改,运行
$ sudo sysctl --system
(3) 装置 containerd 运行时
咱们将在 Kubernetes 集群中应用 containerd 运行时,首先要装置它的依赖项。
$ sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates
启用 docker 存储库
$ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/docker.gpg | |
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" |
运行以下 apt 命令装置 containerd
$ sudo apt update | |
$ sudo apt install -y containerd.io |
配置 containerd,使它应用 systemd 作为 cgroup
$ containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1 | |
$ sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml |
重启并启用 containerd 服务
$ sudo systemctl restart containerd | |
$ sudo systemctl enable containerd |
(4) 增加 Kubernetes apt 存储库
执行以下命令为 Kubernetes 增加 apt 存储库
$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - | |
$ sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main" |
留神: 在编写本指南时,Xenial 是最新的 Kubernetes 存储库,然而当存储库在 Ubuntu 22.04 (Jammy Jellyfish) 上可用时,你须要在 apt-add-repository 命令中用 jammy 替换 xenial
(5) 装置 Kubectl, kubeadm 和 kubelet
Install Kubernetes components like kubectl, kubelet and Kubeadm utility on all the nodes. Run following set of commands,
在所有节点上装置 kubectl,kubelet,Kubeadm
$ sudo apt update | |
$ sudo apt install -y kubelet kubeadm kubectl | |
$ sudo apt-mark hold kubelet kubeadm kubectl |
(6) 应用 Kubeadm 命令初始化 Kubernetes 集群
咱们曾经筹备好初始化 Kubernetes 集群,仅在主节点上运行以下 Kubeadm 命令。
$ sudo kubeadm init --control-plane-endpoint=k8smaster.example.net
下面的输入确认控制面板已胜利初始化,咱们还失去了一组与集群交互的命令,以及工作节点退出集群的命令。
因而,要开始与集群交互,请从主节点运行以下命令
$ mkdir -p $HOME/.kube | |
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config | |
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config |
当初,尝试运行以下 kubectl 命令来查看集群和节点状态
$ kubectl cluster-info | |
$ kubectl get nodes |
将两个工作节点退出到集群中,命令曾经有输入了,只须要在工作节点上复制粘贴即可
$ sudo kubeadm join k8smaster.example.net:6443 --token vt4ua6.wcma2y8pl4menxh2 \ | |
--discovery-token-ca-cert-hash sha256:0494aa7fc6ced8f8e7b20137ec0c5d2699dc5f8e616656932ff9173c94962a36 |
两个工作节点上的输入如下:
在主节点应用 kubectl 命令查看节点状态
$ kubectl get nodes
As we can see nodes status is‘NotReady’,
so to make it active. We must install CNI (Container Network Interface)
or network add-on plugins like Calico, Flannel and Weave-net.
正如咱们看到的,节点的状态是 NotReady,所以要使它激活。咱们必须装置 CNI (Container Network Interface) 或例如 Calico, Flannel 和 Weave-net 等插件
(6) 装置 Calico Pod Network Add-on
在主节点运行以下 curl 和 kubectl 命令装置 Calico 网络插件
$ curl https://projectcalico.docs.tigera.io/manifests/calico.yaml -O | |
$ kubectl apply -f calico.yaml |
验证 kube-system 命名空间中 pods 的状态
$ kubectl get pods -n kube-system
太好了,检查一下节点状态
$ kubectl get nodes
下面的输入确认了节点是流动节点,咱们能够说咱们的 Kubernetes 集群是无效的。
(7) 测试 Kubernetes
为了测试 Kubernetes,让咱们尝试部署基于 nginx 的应用程序并尝试拜访它。
$ kubectl create deployment nginx-app --image=nginx --replicas=2
查看 nginx-app 部署状态
$ kubectl get deployment nginx-app | |
NAME READY UP-TO-DATE AVAILABLE AGE | |
nginx-app 2/2 2 2 68s | |
$ |
将部署公开为 NodePort 模式
$ kubectl expose deployment nginx-app --type=NodePort --port=80 | |
service/nginx-app exposed | |
$ |
查看服务状态,执行以下命令
$ kubectl get svc nginx-app | |
$ kubectl describe svc nginx-app |
应用以下命令拜访基于 nginx 的应用程序
$ curl http://<woker-node-ip-addres>:31246
$ curl http://192.168.1.174:31246
很好,下面的输入证实了基于 nginx 的应用程序是可拜访的。
我的开源我的项目
- course-tencent-cloud(酷瓜云课堂 – gitee 仓库)
- course-tencent-cloud(酷瓜云课堂 – github 仓库)