使用 Kubespray 安裝 Kubernetes 集群
你是否正在尋找有關如何使用 Kubespray 安裝 Kubernetes(k8s)的簡單指南?
此頁面上的分步指南將向你展示如何在 Linux 系統上使用 Kubespray 安裝 Kubernetes 集群。
Kubespray 是一個自由開源的工具,它提供了 Ansible 劇本 來部署和管理 Kubernetes 集群。它旨在簡化跨多個節點的 Kubernetes 集群的安裝過程,允許用戶快速輕鬆地部署和管理生產就緒的 Kubernetes 集群。
它支持一系列操作系統,包括 Ubuntu、CentOS、Rocky Linux 和 Red Hat Enterprise Linux(RHEL),它可以在各種平台上部署 Kubernetes,包括裸機、公共雲和私有雲。
在本指南中,我們使用以下實驗室:
- Ansible 節點(Kubespray 節點):最小安裝的 Ubuntu 22.04 LTS(192.168.1.240)
- 3 個控制器節點:最小安裝的 Rocky Linux 9(192.168.1.241/242/243)
- 2 個工作節點:最小安裝的 Rocky Linux 9(192.168.1.244/245)
Kubespray 的最低系統要求
- 主節點:1500 MB RAM、2 個 CPU 和 20 GB 可用磁碟空間
- 工作節點:1024 MB、2 個 CPU、20 GB 可用磁碟空間
- Ansible 節點:1024 MB、1 個 CPU 和 20 GB 磁碟空間
- 每個節點上的互聯網連接
- 擁有 sudo 管理員許可權
事不宜遲,讓我們深入了解安裝步驟。
步驟 1)配置 Kubespray 節點
登錄到你的 Ubuntu 22.04 系統並安裝 Ansible。運行以下一組命令:
$ sudo apt update
$ sudo apt install git python3 python3-pip -y
$ git clone https://github.com/kubernetes-incubator/kubespray.git
$ cd kubespray
$ pip install -r requirements.txt
驗證 Ansible 版本,運行:
$ ansible --version
創建主機清單,運行以下命令,不要忘記替換適合你部署的 IP 地址:
$ cp -rfp inventory/sample inventory/mycluster
$ declare -a IPS=(192.168.1.241 192.168.1.241 192.168.1.242 192.168.1.243 192.168.1.244 192.168.1.245)
$ CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
修改清單文件,設置 3 個控制節點和 2 個工作節點:
$ vi inventory/mycluster/hosts.yaml
保存並關閉文件。
查看並修改文件 inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml
中的以下參數:
kube_version: v1.26.2
kube_network_plugin: calico
kube_pods_subnet: 10.233.64.0/18
kube_service_addresses: 10.233.0.0/18
cluster_name: linuxtechi.local
要啟用 Kuberenetes 儀錶板和入口控制器等插件,請在文件 inventory/mycluster/group_vars/k8s_cluster/addons.yml
中將參數設置為已啟用:
$ vi inventory/mycluster/group_vars/k8s_cluster/addons.yml
dashboard_enabled: true
ingress_nginx_enabled: true
ingress_nginx_host_network: true
保存並退出文件。
步驟 2)將 SSH 密鑰從 Ansible 節點複製到所有其他節點
首先在你的 Ansible 節點上為你的本地用戶生成 SSH 密鑰:
$ ssh-keygen
使用 ssh-copy-id
命令複製 SSH 密鑰:
$ ssh-copy-id sysops@192.168.1.241
$ ssh-copy-id sysops@192.168.1.242
$ ssh-copy-id sysops@192.168.1.243
$ ssh-copy-id sysops@192.168.1.244
$ ssh-copy-id sysops@192.168.1.245
還要在每個節點上運行以下命令:
$ echo "sysops ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/sysops
步驟 3)禁用防火牆並啟用 IPV4 轉發
要在所有節點上禁用防火牆,請從 Ansible 節點運行以下 ansible
命令:
$ cd kubespray
$ ansible all -i inventory/mycluster/hosts.yaml -m shell -a "sudo systemctl stop firewalld && sudo systemctl disable firewalld"
運行以下 ansible
命令以在所有節點上啟用 IPv4 轉發和禁用交換:
$ ansible all -i inventory/mycluster/hosts.yaml -m shell -a "echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf"
$ ansible all -i inventory/mycluster/hosts.yaml -m shell -a "sudo sed -i '/ swap / s/^(.*)$/#1/g' /etc/fstab && sudo swapoff -a"
步驟 4)啟動 Kubernetes 部署
現在,我們都準備好開始 Kubernetes 集群部署,從 Ansible 節點運行下面的 Ansible 劇本:
$ cd kubespray
$ ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root cluster.yml
現在監控部署,可能需要 20 到 30 分鐘,具體取決於互聯網速度和硬體資源。
部署完成後,我們將在屏幕上看到以下輸出:
很好,上面的輸出確認部署已成功完成。
步驟 5)訪問 Kubernetes 集群
登錄到第一個主節點,切換到 root 用戶,在那裡運行 kubectl
命令:
$ sudo su -
# kubectl get nodes
# kubectl get pods -A
輸出:
完美,上面的輸出確認集群中的所有節點都處於就緒狀態,並且所有命名空間的 容器莢 都已啟動並正在運行。這表明我們的 Kubernetes 集群部署成功。
讓我們嘗試部署基於 Nginx 的部署並將其公開為節點埠,運行以下 kubectl
命令:
$ kubectl create deployment demo-nginx-kubespray --image=nginx --replicas=2
$ kubectl expose deployment demo-nginx-kubespray --type NodePort --port=80
$ kubectl get deployments.apps
$ kubectl get pods
$ kubectl get svc demo-nginx-kubespray
以上命令的輸出:
現在嘗試使用工作節點的 IP 地址和節點埠(30050)訪問此 Nginx 應用。
使用以下 curl
命令或 Web 瀏覽器訪問此應用。
$ curl 192.168.1.245:30050
或者,
完美,這證實了應用可以在我們的集群之外訪問。
步驟 6)Kubernetes 儀錶板(GUI)
要訪問 Kubernetes 儀錶板,讓我們首先創建服務帳戶並分配管理員許可權,以便它可以使用令牌訪問儀錶板。
在 kube-system 命名空間中創建名為 「admin-user」 的服務帳戶:
$ vi dashboard-adminuser.yml
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kube-system
保存並關閉文件。
$ kubectl apply -f dashboard-adminuser.yml
serviceaccount/admin-user created
創建集群角色綁定:
$ vi admin-role-binding.yml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kube-system
保存並退出文件。
$ kubectl apply -f admin-role-binding.yml
clusterrolebinding.rbac.authorization.k8s.io/admin-user created
現在,為管理員用戶創建令牌:
$ kubectl -n kube-system create token admin-user
複製此令牌並將其放在安全的地方,因為我們將使用令牌登錄 Kubernetes 儀錶板。
使用以下 ssh
命令從你的系統連接到第一個主節點:
$ ssh -L8001:localhost:8001 sysops@192.168.1.241
注意:替換適合你環境的 IP 地址。
登錄後,切換到 root 用戶並運行 kubectl proxy
命令:
$ sudo su -
# kubectl proxy
Starting to serve on 127.0.0.1:8001
打開系統的網路瀏覽器,如下設置代理:
完成代理設置後,將以下網址粘貼到瀏覽器中:
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#/login
選擇令牌登錄並粘貼你在上面為管理員用戶生成的令牌,然後單擊「 登錄 」。
這就是本指南的全部內容,我希望你能從中找到有用的信息。請在下面的評論部分中發表你的疑問和反饋。
via: https://www.linuxtechi.com/install-kubernetes-using-kubespray/
作者:Pradeep Kumar 選題:lkxed 譯者:geekpi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive