2024-06-12 渥太华微生活
简介:
Kubernetes 是一个符合 OCI 标准的容器工作负载编排开源平台。作为容器编排器,Kubernetes 可自动跨多个系统部署容器,并帮助扩展和管理容器化应用程序。
先决条件:
两台或更多台运行 Ubuntu 22.04 的服务器
命令行访问
访问每个系统上具有 sudo 权限的用户帐户
2 个 CPU
至少 2GB 的 RAM
至少 2GB 的磁盘空间
可靠的互联网连接
一、准备工作(所有节点):
1)禁用swap
硬盘上的交换空间 (swap),操作系统会尝试将其用作 RAM。操作系统会尝试将不常访问的数据移动到交换空间,以释放 RAM 以执行更紧迫的任务。但是因为硬盘比 RAM 慢,所以访问swap中的数据比访问 RAM 中的数据慢得多。
Kubernetes 的调度基于对可用资源的理解。如果工作负载开始使用swap,Kubernetes 就很难做出准确的调度决策。因此,建议在安装 Kubernetes 之前禁用swap。
运行以下命令临时禁用系统上的swap:
sudo swapoff -a
继续运行以下命令会修改配置文件,以使swap在系统重启后仍保持关闭状态。
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
2)设置主机名
当我们使用 Kubernetes 集群时,我们必须为节点提供唯一的主机名,以便 Kubernetes 可以使用这些名称来识别节点。
运行以下命令修改主机名:
# 对于主节点 sudo hostnamectl set-hostname master-node # 对于工作节点: sudo hostnamectl set-hostname worker-node-01
运行以下命令刷新当前 bash 会话,以便它可以立即识别并使用新主机名。
exec bash
3)更新 /etc/hosts 文件以进行主机名解析
设置主机名是不够的,还必须将主机名映射到其 IP 地址。应该更新所有节点(或至少主节点)的 /etc/hosts 文件。
运行以下命令进行主机名解析:
sudo nano /etc/hosts
10.0.0.216 master-node 10.0.0.208 worker-node-01
4)在所有节点上设置 IPV4 网桥
要在所有节点上配置 IPV4 网桥 (IPV4 bridge),请在每个节点上执行以下命令:
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter # sysctl params required by setup, params persist across reboots 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 # Apply sysctl params without reboot sudo sysctl --system
二、安装Docker(所有节点):
Docker 平台允许您在容器内创建、分发和运行应用程序。这些容器提供轻量级和可移植的环境,确保在各种设置中保持一致的性能。
Docker 充当容器运行时,通过促进容器化应用程序的高效管理和部署,在 Kubernetes 中发挥着至关重要的作用。
1)更新软件包列表:
sudo apt update
2)运行以下命令进行安装 Docker:
sudo apt install docker.io -y
3)运行以下命令将 Docker 设置为在Ubuntu启动时启动:
sudo systemctl enable docker
4)验证 Docker 是否正在运行:
sudo systemctl status docker
5)如果 Docker 未运行,请使用以下命令启动它:
sudo systemctl start docker
6)查看docker 版本(可选):
docker version
三、安装Kubernetes(包括kubelet, kubeadm, and kubectl)(所有节点):
在所有节点上安装 kubelet、kubeadm 和 kubectl 来创建 Kubernetes 集群。它们在管理 Kubernetes 集群中起着重要作用。
Kubelet 是在每个节点上运行的节点代理,负责确保容器按照 Pod 规范在 Pod 中运行。
kubeadm 用于引导 Kubernetes 集群,包括设置主节点和帮助工作节点加入集群。
Kubectl 是一个 CLI 工具,用于 Kubernetes 运行命令来执行各种操作,例如部署应用程序、检查资源和直接从终端管理集群操作。
1)更新软件包列表,安装依赖:
sudo apt update sudo apt install -y apt-transport-https ca-certificates curl
2)添加 Kubernetes 签名密钥 (Kubernetes Signing Key)
由于 Kubernetes 来自非标准存储库,所以需要下载签名密钥以确保软件正版。
在每个节点上,使用 curl 命令下载密钥并将其存储在安全的地方(默认为 /etc/apt/keyrings/):
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
3)添加软件存储库:
Kubernetes 不包含在默认的 Ubuntu 存储库中。要将 Kubernetes 存储库添加到列表中,请在每个节点上输入以下命令:
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
4)刷新软件包列表以查看新项目:
sudo apt update
5)运行命令来安装kubelet、kubeadm 和 kubectl:
sudo apt install kubelet kubeadm kubectl -y
6)将软件包标记为hold,以防止自动安装、升级或删除:
sudo apt-mark hold kubelet kubeadm kubectl
7)验证安装:
kubeadm version
kubectl version
四、初始化 Kubernetes 集群(主节点)
使用 kubeadm 初始化 Kubernetes 控制平面时,会部署多个组件来管理和编排集群。这些组件的一些示例包括 kube-apiserver、kube-controller-manager、kube-scheduler、etcd、kube-proxy。
我们需要通过运行以下命令下载这些组件的镜像:
1)配置 kubelet:
打开 kubelet 文件:
sudo nano /etc/default/kubelet
在文件中添加以下行:
KUBELET_EXTRA_ARGS="--cgroup-driver=cgroupfs"
重新加载配置并重新启动 kubelet:
sudo systemctl daemon-reload && sudo systemctl restart kubelet
2)配置 docker:
打开Docker守护进程配置文件:
sudo nano /etc/docker/daemon.json
添加以下配置块:
{ "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" }
重新加载配置并重新启动 Docker:
sudo systemctl daemon-reload && sudo systemctl restart docker
3)配置 kubeadm:
打开 kubeadm 配置文件:
sudo nano /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
在文件中添加以下行:
Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"
重新加载配置并重新启动 kubelet:
sudo systemctl daemon-reload && sudo systemctl restart kubelet
4)初始化集群:
sudo kubeadm init --control-plane-endpoint=master-node --upload-certs
操作完成后,输出底部会显示 kubeadm join 命令。记下此命令,因为您将使用它来将工作节点加入集群。
5)配置集群:
为 Kubernetes 集群创建目录:
mkdir -p $HOME/.kube
将配置文件复制到目录:
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
将目录的所有权更改为当前用户和组
sudo chown $(id -u):$(id -g) $HOME/.kube/config
五、将 Pod 网络部署到集群(主节点)
Pod 网络 (Pod Network) 是一种允许集群中不同节点之间进行通信的方式。
本文使用 Flannel 节点网络管理器 (Flannel node network manager) 创建 Pod 网络。
通过执行以下步骤将 Flannel 管理器应用到主节点:
1)使用 kubectl 安装 Flannel:
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
2)清除节点污染 (Untaint the node):
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
六、将工作节点添加到集群
配置主节点后,即可将工作节点添加到集群。在主节点上初始化 Kubeadm 时,您将收到一个令牌 (token),可用于添加工作节点。
要将工作节点添加到 Kubernetes 集群,请使用 kubeadm join 命令。
1)停止并禁用 AppArmor:
sudo systemctl stop apparmor && sudo systemctl disable apparmor
2)重启 containerd:
sudo systemctl restart containerd.service
3)在【工作节点】上,应用该步骤中的 kubeadm join 命令,以将它们连接到主节点。
记得在命令前加上 sudo:
sudo kubeadm join [master-node-ip]:6443 --token [token] --discovery-token-ca-cert-hash sha256:[hash]
将 [master-node-ip]、[token] 和 [hash] 替换为 kubeadm join 命令输出中的值。
例如,在此种情况下,命令如下:
sudo kubeadm join 10.0.0.216:6443 --token reyu01.9cux4t59j29f034a --discovery-token-ca-cert-hash sha256:bd00634e67acae5cef63830d5cba40ca0812de86b142979742b7205536df7b22
4)检查所有节点的状态(主节点)
几分钟后,切换到主节点,并输入以下命令检查节点的状态:
kubectl get nodes
系统显示了集群中的主节点和所有工作节点,如下图:
结论:
按照本文介绍的步骤操作后,您应该已经在 Ubuntu 上安装了 Kubernetes。
如果您是没有 Kubernetes 部署经验的初学者,Minikube 是一个很好的起点。
Q&A:
Q:在重启主节点服务器后,得到拒绝连接错误,如下:
$ kubectl get nodes The connection to the server 10.0.2.15:6443 was refused - did you specify the right host or port?
A:解决办法如下:
sudo -i swapoff -a exit strace -eopenat kubectl version
成功解决,如下图:
编者注:新闻取自各大新闻媒体,新闻内容并不代表本网立场!文字和图片来自网络,版权归原作者所有。如有侵权,请速联系小编,立即删除。
全部评论 (0) |
---|