Linux中國

使用 Kubespray 安裝 Kubernetes 集群

你是否正在尋找有關如何使用 Kubespray 安裝 Kubernetes(k8s)的簡單指南?

此頁面上的分步指南將向你展示如何在 Linux 系統上使用 Kubespray 安裝 Kubernetes 集群。

Kubespray 是一個自由開源的工具,它提供了 Ansible 劇本 playbook 來部署和管理 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

輸出:

完美,上面的輸出確認集群中的所有節點都處於就緒狀態,並且所有命名空間的 容器莢 Pod 都已啟動並正在運行。這表明我們的 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

選擇令牌登錄並粘貼你在上面為管理員用戶生成的令牌,然後單擊「 登錄 Sign in 」。

這就是本指南的全部內容,我希望你能從中找到有用的信息。請在下面的評論部分中發表你的疑問和反饋。

via: https://www.linuxtechi.com/install-kubernetes-using-kubespray/

作者:Pradeep Kumar 選題:lkxed 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國