Kubernetes專欄 | 安裝部署(一)

binhuang01發表於2022-11-30

  --隨著雲原生概念的普及,許多企業的業務紛紛上雲,為了追求可靠性,穩定性,和彈性伸縮,提升資源利用率等需求。Kubernetes這個谷歌開源的容器編排平臺已日益流行,被大家熟知和使用。

  通常來說,Kubernetes常用的安裝部署方式有三種:

  • kubeadm工具 (官方推薦)
  • 二進位制部署 (配置靈活)
  • minikube (用於搭建個人實驗環境)

  本文主要介紹第一種部署方式,即使用kubadm工具進行k8s叢集的部署。其他部署的方式會在後續文章介紹。

  一、環境準備

   本次搭建的是一個一主兩節點的叢集,需要三臺機器(虛擬機器/物理機均可)。使用的是三臺CentOS7的虛擬機器。具體規格如下:

  • CentOS7(2C4G) --- 用於部署master
  • CentOS7 (1C2G) * 2 --- 用於部署工作節點

  機器的使用的作業系統發行版沒有具體的要求,但需要系統核心版本高於3.10。準備好機器後我們需要先對機器的一些規格引數進行設定。

   首先,我們使用命令hostname將三臺機器的主機名分別設定為k8s-master和k8s-node01,k8s-node02

  [root@k8s-master ~]# hostname -b k8s-master

  [root@k8s-master ~]# hostname

   k8s-master

  

   設定完成後,需要重啟才能生效。 接著,我們需要關閉所有機器上的swap(官方推薦,能夠更高效地使用記憶體),在k8s 1.21版本前,swap可以不用關。在1.21版本後如果不關閉swap,工作節點上kubelet程式將無法啟動。關閉swap如下

  [root@k8s-master ~]# swapoff -a

  [root@k8s-master ~]# free total used free shared buff/cache available Mem:

             3861292 1534860 250380 14592 2076052 2022784

            Swap: 0 0 0

  使用swapoff之後,我們使用free命令確認swap是否已經被關閉。 關閉完swap之後,我們還需要把所有機器的防火牆關閉(不需要關閉iptables)

  [root@k8s-master ~]# systemctl disable firewalld

   Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.

   Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

  [root@k8s-master ~]# service firewalld status

  Redirecting to /bin/systemctl status firewalld.service

  ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)

   Active: inactive (dead)

  Docs: man:firewalld(1)

  

   二、映象和工具準備

   kubernetes是用來編排和管理容器的,因此我們機器上需要先安裝容器執行環境,這裡以常用的容器執行時docker為例,先在三臺機器上安裝docker環境。 docker安裝可以參考官方文件: https://docs.docker.com/engine/install

  [root@k8s-master ~]# service docker status

  Redirecting to /bin/systemctl status docker.service

  ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)

   Active: active (running) since Thu 2022-11-03 05:15:24 EDT; 3 weeks 4 days ago

   Docs: https://docs.docker.com

  Main PID: 1192 (dockerd) CGroup: /system.slice/docker.service

  ├─1192 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock └─2046 /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 1514 -container-ip 172.18.0.3 -container-port 10514

   安裝完成後,我們可以檢視dockerd程式是否啟動,docker服務是否正常啟動。 確保機器上的docker服務正常執行後,我們需要將k8s的映象元件給拉取下來,因為使用kubeadm工具部署不同於二進位制部署(元件的啟動是執行檔案加啟動引數啟動的),像kube-apiserver、kube-controller-manager和pause等元件是以pod的形式進行部署的。 這裡使用一個指令碼將這些映象拉取下來:     #!/bin/bash

    # 要部署的k8s版本號

    KUBE_VERSION=v1.23.1

    # pause容器版本號,需要和k8s版本號對應,可以到github上k8s的倉庫檢視對應關係

    PAUSE_VERSION=3.6

    # dns/etcd映象版本號同上

    CORE_DNS_VERSION=1.8.6

    ETCD_VERSION=v3.5.1

    # 以拉取pause映象為例

    docker pull dyrnq/pause:$PAUSE_VERSION

    # 重新打標籤為 k8s.gcr.io

    docker tag dyrnq/pause:$PAUSE_VERSION k8s.gcr.io/pause:$PAUSE_VERSION

    # 刪掉舊的標籤 docker rmi dyrnq/pause:$PAUSE_VERSION

    # 其他映象同理,需要拉取的還有etcd/kube-proxy/codedns/kube-apiserver/kube-controller-manager/kube-schedule

 

  拉取完所有映象後,我們還需要將kubelet(用於在工作節點上建立pod)/kubectl (k8s的客戶端工具,執行k8s相關命令)/kubeadm(部署)工具下載下來。訪問https://github.com/kubernetes/kubernetes把對應版本的二進位制檔案下載下來。

 

     [root@k8s-master opt]# docker images

      REPOSITORY TAG IMAGE ID CREATED SIZE

      k8s.gcr.io/etcd 3.5.1-0 ba71c233964f 13 months ago 181MB

      k8s.gcr.io/coredns/coredns v1.8.6 a4ca41631cc7 13 months ago 46.8MB

      k8s.gcr.io/pause 3.6 6270bb605e12 15 months ago 683kB

      k8s.gcr.io/kube-apiserver v1.23.1 b6d7abedde39 11 months ago 135MB

      k8s.gcr.io/kube-proxy v1.23.1 b46c42588d51 11 months ago 112MB

      k8s.gcr.io/kube-controller-manager v1.23.1 f51846a4fd28 11 months ago 125MB

      k8s.gcr.io/kube-scheduler v1.23.1 71d575efe628 11 months ago 53.5MB

  三、安裝部署

    機器環境和docker映象準備好之後,我們就可以開始安裝了。首先使用命令kubeadm init進行初始化。初始成功後如下

    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 You should now deploy a Pod network to the cluster.

    Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: /docs/concepts/cluster-administration/addons/

    You can now join any number of machines by running the following on each node as root: kubeadm join : --token --discovery-token-ca-cert-hash sha256: 然後在工作節點上執行最後一句命令加入到叢集: kubeadm join : --token --discovery-token-ca-cert-hash sha256:

    最後我們在master機器上使用kubectl get nodes獲取叢集情況:

    NAME STATUS ROLES AGE VERSION

    k8s-master Ready control-plane,master 27d v1.23.1

    k8s-node01 Ready node 27d v1.23.1

    k8s-node02 Ready node 27d v1.23.1

  

   kubeadm工具官方文件:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm

   至此,我們使用kubeadm工具進行部署k8s叢集就算完成了。通常來說為了保證高可用,我們需要三個master節點,這裡因為機器資源關係,就只部署單master節點。

相關文章