使用kubeadm部署k8s


k8s組件

master,node

master中包括apiserver,scheduler,controller。etcd

apiserver:負責接收用戶請求,並且保存至etcd中。

scheduler:負責將apisever中創建的資源根據node的負載情況調度至其他node

controller:負責監控apiserver中用戶期望創建資源的狀態。如果當前狀態與期望狀態不同,controller就會試圖將資源重啟或者刪除重建。和拉取容器鏡像

etcd:用於保存k8s cluster中的所有配置信息

node節點:kubelet,kube-proxy,docker,pod

docker/容器引擎:運行pod時容器引擎

kubelet:相當於agent,會watch着apiserver中的資源變動,一旦資源跟自己節點有關,則執行調動docker引擎。拉取鏡像。創建容器

pod:k8s中的核心基本單元。一個pod中可以存在多個容器。一個pod共享同一組網絡空間。IPC。等

kube-proxy:

ADDONS插件:

DNS:用於服務注冊服務發現

CNI:容器網絡插件。包括(flannel,calico)

k8s中常用的資源類型:Pod,Service,Namespace,Volume。控制器對象。ReplicaSet,deployment,DaemonSet,StatefulSet。等等

使用kubeadm容器化部署k8s

設定時鍾同步

若節點可直接訪問互聯網,直接啟動chronyd系統服務,並設定其隨系統引導而啟動。

        ~]# systemctl start chronyd.service
        ~]# systemctl enable chronyd.service

關閉iptables或firewalld服務

關閉並禁用SELinux

若當前啟用了SELinux,則需要編輯/etc/sysconfig/selinux文件,禁用SELinux,並臨時設置其當前狀態為permissive:

    ~]# sed -i 's@^\(SELINUX=\).*@\1disabled@' /etc/sysconfig/selinux
    ~]# setenforce 0

禁用Swap設備

部署集群時,kubeadm默認會預先檢查當前主機是否禁用了Swap設備,並在未禁用時強制終止部署過程。因此,在主機內存資源充裕的條件下,需要禁用所有的Swap設備,否則,就需要在后文的kubeadm init及kubeadm join命令執行時額外使用相關的選項忽略檢查錯誤。

關閉Swap設備,需要分兩步完成。首先是關閉當前已啟用的所有Swap設備:

    ~]# swapoff -a

而后編輯/etc/fstab配置文件,注釋用於掛載Swap設備的所有行

啟用ipvs內核模塊

創建內核模塊載入相關的腳本文件/etc/sysconfig/modules/ipvs.modules,設定自動載入的內核模塊。文件內容如下:

#!/bin/bash
ipvs_mods_dir="/usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs"
for mod in $(ls $ipvs_mods_dir | grep -o "^[^.]*"); do
    /sbin/modinfo -F filename $mod  &> /dev/null
    if [ $? -eq 0 ]; then
        /sbin/modprobe $mod
    fi
done

修改文件權限,並手動為當前系統加載內核模塊:

    ~]# chmod +x /etc/sysconfig/modules/ipvs.modules
    ~]# bash /etc/sysconfig/modules/ipvs.modules

**二、安裝程序包(在各主機上完成如下設定) **

1、生成yum倉庫配置

首先獲取docker-ce的配置倉庫配置文件:

        ~]# wwget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker.repo

而后手動生成kubernetes的yum倉庫配置文件/etc/yum.repos.d/kubernetes.repo,內容如下:

[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
enabled=1

2、安裝相關的程序包

Kubernetes會對經過充分驗正的Docker程序版本進行認證,目前認證完成的最高版本是17.03,但docker-ce的最新版本已經高出了幾個版本號。管理員可忽略此認證而直接使用最新版本的docker-ce程序,不過,建議根據后面的說明,將安裝命令替換為安裝17.03版。

    ~]# yum install docker-ce -y
    ~]# yum install kubelet kubeadm kubectl -y

三、啟動docker服務(在各節點執行)

另外,docker自1.13版起會自動設置iptables的FORWARD默認策略為DROP,這可能會影響Kubernetes集群依賴的報文轉發功能,因此,需要在docker服務啟動后,重新將FORWARD鏈的默認策略設備為ACCEPT,方式是修改/usr/lib/systemd/system/docker.service文件,在“ExecStart=/usr/bin/dockerd”一行之后新增一行如下內容:

    ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT

image

重載完成后即可啟動docker服務:

    ~]#systemctl daemon-reload       

    ~]# systemctl start docker.service

而后設定docker和kubelet隨系統引導自動啟動:

~]# systemctl enable docker kubelet

四、初始化主節點(在master上完成如下操作)

1、初始化master節點

若未禁用Swap設備,則需要編輯kubelet的配置文件/etc/sysconfig/kubelet,設置其忽略Swap啟用的狀態錯誤,內容如下:

KUBELET_EXTRA_ARGS="--fail-swap-on=false"

(可選步驟)而后,在運行初始化命令之前先運行如下命令單獨獲取相關的鏡像文件,而后再運行后面的kubeadm init命令,以便於觀察到鏡像文件的下載過程。

    ~]# kubeadm config images pull

初始化方式一:

運行如下命令完成master01節點的初始化:

    ~]# kubeadm init --kubernetes-version=v1.16.3 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap --image-repository gcr.azk8s.cn/google_containers

命令中的各選項簡單說明如下:

(1) --kubernetes-version選項的版本號用於指定要部署的Kubenretes程序版本,它需要與當前的kubeadm支持的版本保持一致;

(2) --pod-network-cidr選項用於指定分Pod分配使用的網絡地址,它通常應該與要部署使用的網絡插件(例如flannel、calico等)的默認設定保持一致,10.244.0.0/16是flannel默認使用的網絡;

(3) --service-cidr用於指定為Service分配使用的網絡地址,它由kubernetes管理,默認即為10.96.0.0/12;

(4) 最后一個選項“--ignore-preflight-errors=Swap”僅應該在未禁用Swap設備的狀態下使用。
(5) --image-repository gcr.azk8s.wcn/google_containers 更改默認的鏡像倉庫指定為國內鏡像

初始化方式二:

kubeadm也可通過配置文件加載配置,以定制更豐富的部署選項。以下是個符合前述命令設定方式的使用示例,不過,它明確定義了kubeProxy的模式為ipvs,並支持通過修改imageRepository的值修改獲取系統鏡像時使用的鏡像倉庫。

apiVersion: kubeadm.k8s.io/v1alpha2
kind: MasterConfiguration
kubernetesVersion: v1.13.3
api:
  advertiseAddress: 172.20.0.71
  bindPort: 6443
  controlPlaneEndpoint: ""
imageRepository: k8s.gcr.io
kubeProxy:
  config:
    mode: "ipvs"
    ipvs:
      ExcludeCIDRs: null
      minSyncPeriod: 0s
      scheduler: ""
      syncPeriod: 30s   
kubeletConfiguration:
  baseConfig:
    cgroupDriver: cgroupfs
    clusterDNS:
    - 10.96.0.10
    clusterDomain: cluster.local
    failSwapOn: false
    resolvConf: /etc/resolv.conf
    staticPodPath: /etc/kubernetes/manifests
networking:
  dnsDomain: cluster.local
  podSubnet: 10.244.0.0/16
  serviceSubnet: 10.96.0.0/12

將上面的內容保存於配置文件中,例如kubeadm-config.yaml,而后執行相應的命令:

  ~]# kubeadm init --config kubeadm-config.yaml --ignore-preflight-errors=Swap

注意:對於Kubernetes系統的新用戶來說,無論使用上述哪種方法,命令運行結束后,請記錄最后的kubeadm join命令輸出的最后提示的操作步驟。下面的內容是需要用戶記錄的一個命令輸出示例,它提示了后續需要的操作步驟:

image.png

2、初始化kubectl

kubectl是kube-apiserver的命令行客戶端程序,實現了除系統部署之外的幾乎全部的管理操作,是kubernetes管理員使用最多的命令之一。kubectl需經由API server認證及授權后方能執行相應的管理操作,kubeadm部署的集群為其生成了一個具有管理員權限的認證配置文件/etc/kubernetes/admin.conf,它可由kubectl通過默認的“$HOME/.kube/config”的路徑進行加載。當然,用戶也可在kubectl命令上使用--kubeconfig選項指定一個別的位置。

下面復制認證為Kubernetes系統管理員的配置文件至目標用戶(例如當前用戶root)的家目錄下:

    ~]# mkdir ~/.kube 
    ~]# cp /etc/kubernetes/admin.conf ~/.kube/config

而后,即可通過kubectl進行客戶端命令測試,並借此了解集群組件的當前狀態:
~]# kubectl get componentstatus

一個正常的輸出應該類似如下輸出結果所示:

NAME                 STATUS    MESSAGE              ERROR
  controller-manager   Healthy   ok                   
  scheduler            Healthy   ok                   
  etcd-0               Healthy   {"health": "true"}

node節點拉取鏡像

 docker image pull gcr.azk8s.cn/google_containers/kube-proxy:v1.16.3 && docker image pull gcr.azk8s.cn/google_containers/pause:3.1 && docker image pull quay.io/coreos/flannel:v0.11.0-amd64

3、添加flannel網絡附件

Kubernetes系統上Pod網絡的實現依賴於第三方插件進行,這類插件有近數十種之多,較為著名的有flannel、calico、canal和kube-router等,簡單易用的實現是為CoreOS提供的flannel項目。下面的命令用於在線部署flannel至Kubernetes系統之上:

    ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

image.png

而后使用如下命令確認其輸出結果中Pod的狀態為“Running”,類似如下所示:

    ~]# kubectl get pods -n kube-system -l app=flannel
    NAME                          READY   STATUS    RESTARTS   AGE
    kube-flannel-ds-amd64-wscnz   1/1     Running   0          14m

五、添加節點到集群中(在node01和node02上分別完成如下操作)

1、若未禁用Swap設備,編輯kubelet的配置文件/etc/sysconfig/kubelet,設置其忽略Swap啟用的狀態錯誤,內容如下:
KUBELET_EXTRA_ARGS="--fail-swap-on=false"

kubeadm join 192.168.1.195:6443 --token b3agph.vszgxzb76lneyob5
--discovery-token-ca-cert-hash sha256:19fcd3a8494247f8f12ce17fb65620853301cb07662c2f56c627075d4dbdc3db
image.png

部署完成


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM