官术网_书友最值得收藏!

2.3 以二進制文件方式安裝Kubernetes集群

本節以二進制文件方式安裝Kubernetes集群,并對每個組件的配置進行詳細說明。

從Kubernetes發布官網https://github.com/kubernetes/kubernetes/releases找到對應的版本號,單擊CHANGELOG,找到已編譯好的二進制文件的下載頁面,如圖2.1和圖2.2所示。本書基于Kubernetes 1.14版本進行說明。

圖2.1 GitHub上Kubernetes的下載頁面一

圖2.2 GitHub上Kubernetes的下載頁面二

在壓縮包kubernetes.tar.gz內包含了Kubernetes的服務程序文件、文檔和示例;在壓縮包kubernetes-src.tar.gz內則包含了全部源代碼。也可以直接下載Server Binaries中的kubernetes-server-linux-amd64.tar.gz文件,其中包含了Kubernetes需要運行的全部服務程序文件。主要的服務程序文件列表如表2.2所示。

表2.2 主要的服務程序文件列表

Kubernetes的主要服務程序都可以通過直接運行二進制文件加上啟動參數完成運行。在Kubernetes的Master上需要部署etcd 、 kube-apiserver 、 kube-controller-manager 、kube-scheduler服務進程,在工作Node上需要部署docker、kubelet和kube-proxy服務進程。

將Kubernetes的二進制可執行文件復制到/usr/bin目錄下,然后在/usr/lib/system/system目錄下為各服務創建systemd服務配置文件(完整的systemd系統知識請參考Linux的相關手冊),這樣就完成了軟件的安裝。要使Kubernetes正常工作,需要詳細配置各個服務的啟動參數。

下面主要介紹各服務最主要的啟動參數,每個服務完整啟動的參數說明詳見2.8節。

2.3.1 Master上的etcd、kube-apiserver、kube-controller-manager、kube-scheduler服務

1.etcd服務

etcd服務作為Kubernetes集群的主數據庫,在安裝Kubernetes各服務之前需要首先安裝和啟動。

從GitHub官網(https://github.com/coreos/etcd/releases)下載etcd二進制文件,將etcd和etcdctl文件復制到/usr/bin目錄。

設置systemd服務配置文件/usr/lib/systemd/system/etcd.service:

        [Unit]
        Description=Etcd Server
        After=network.target

        [Service]
        Type=simple
        WorkingDirectory=/var/lib/etcd/
        EnvironmentFile=-/etc/etcd/etcd.conf
        ExecStart=/usr/bin/etcd

        [Install]
        WantedBy=multi-user.target

其中,WorkingDirectory(/var/lib/etcd/)表示etcd數據保存的目錄,需要在啟動etcd服務之前創建。

配置文件/etc/etcd/etcd.conf通常不需要特別的參數設置(詳細的參數配置內容參見官方文檔),etcd默認使用http://127.0.0.1:2379地址供客戶端連接。

配置完成后,通過systemctl start命令啟動etcd服務。同時,使用systemctl enable命令將服務加入開機啟動列表中:

        # systemctl daemon-reload
        # systemctl enable etcd.service
        # systemctl start etcd.service

通過執行etcdctl cluster-health,可以驗證etcd是否正確啟動:

        # etcdctl endpoint health
        127.0.0.1:2379 is healthy: successfully committed proposal: took = 1.33112ms

2.kube-apiserver服務

將kube-apiserver、kube-controller-manager和kube-scheduler文件復制到/usr/bin目錄。

設置systemd服務配置文件/usr/lib/systemd/system/kube-apiserver.service,內容如下:

        [Unit]
        Description=Kubernetes API Server
        Documentation=https://github.com/GoogleCloudPlatform/kubernetes
        After=etcd.service
        Wants=etcd.service

        [Service]
        EnvironmentFile=/etc/kubernetes/apiserver
        ExecStart=/usr/bin/kube-apiserver $KUBE_API_ARGS
        Restart=on-failure
        Type=notify
        LimitNOFILE=65536

        [Install]
        WantedBy=multi-user.target

配置文件/etc/kubernetes/apiserver的內容包括了kube-apiserver的全部啟動參數,主要的配置參數在變量KUBE_API_ARGS中指定。

        # cat /etc/kubernetes/apiserver
        KUBE_API_ARGS="--etcd-servers=http://127.0.0.1:2379
    --insecure-bind-address=0.0.0.0--insecure-port=8080
    --service-cluster-ip-range=169.169.0.0/16--service-node-port-range=1-65535
    --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,Default
    StorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissi
    onWebhook,ResourceQuota --logtostderr=false --log-dir=/var/log/kubernetes --v=0"

對啟動參數說明如下。

◎ --etcd-servers:指定etcd服務的URL。

◎ --storage-backend:指定etcd的版本,從Kubernetes 1.6開始,默認為etcd 3。注意,在Kubernetes 1.6之前的版本中沒有這個參數,kube-apiserver默認使用etcd 2,對于正在運行的1.5或舊版本的Kubernetes集群,etcd提供了數據升級方案,詳見etcd文檔(https://coreos.com/etcd/docs/latest/upgrades/upgrade_3_0.html)。

◎ --insecure-bind-address:API Server綁定主機的非安全IP地址,設置0.0.0.0表示綁定所有IP地址。

◎ --insecure-port:API Server綁定主機的非安全端口號,默認為8080。

◎ --service-cluster-ip-range:Kubernetes集群中Service的虛擬IP地址范圍,以CIDR格式表示,例如169.169.0.0/16,該IP范圍不能與物理機的IP地址有重合。

◎ --service-node-port-range:Kubernetes集群中Service可使用的物理機端口號范圍,默認值為30000~32767。

◎ --enable-admission-plugins:Kubernetes集群的準入控制設置,各控制模塊以插件的形式依次生效。

◎ --logtostderr:設置為false表示將日志寫入文件,不寫入stderr。

◎ --log-dir:日志目錄。

◎ --v:日志級別。

3.kube-controller-manager服務

kube-controller-manager服務依賴于kube-apiserver服務,設置systemd服務配置文件/usr/lib/systemd/system/kube-controller-manager.service,內容如下:

        [Unit]
        Description=Kubernetes Controller Manager
        Documentation=https://github.com/GoogleCloudPlatform/kubernetes
        After=kube-apiserver.service
        Requires=kube-apiserver.service
        [Service]
        EnvironmentFile=/etc/kubernetes/controller-manager
        ExecStart=/usr/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_ARGS
        Restart=on-failure
        LimitNOFILE=65536

        [Install]
        WantedBy=multi-user.target

配置文件/etc/kubernetes/controller-manager的內容包含了kube-controller-manager的全部啟動參數,主要的配置參數在變量KUBE_CONTROLLER_MANAGER_ARGS中指定:

        # cat /etc/kubernetes/controller-manager
        KUBE_CONTROLLER_MANAGER_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig
    --logtostderr=false --log-dir=/var/log/kubernetes --v=0"

對啟動參數說明如下。

◎ --kubeconfig:設置與API Server連接的相關配置,例如:

        apiVersion: v1
        kind: Config
        users:
        - name: client
          user:
        clusters:
        - name: default
          cluster:
            server: http://192.168.18.3:8080
        contexts:
        - context:
            cluster: default
            user: client
          name: default
        current-context: default

◎ --logtostderr:設置為false表示將日志寫入文件,不寫入stderr。

◎ --log-dir:日志目錄。

◎ --v:日志級別。

4.kube-scheduler服務

kube-scheduler服務也依賴于kube-apiserver服務,設置systemd服務配置文件/usr/lib/systemd/system/kube-scheduler.service,內容如下:

        [Unit]
        Description=Kubernetes Controller Manager
        Documentation=https://github.com/GoogleCloudPlatform/kubernetes
        After=kube-apiserver.service
        Requires=kube-apiserver.service

        [Service]
        EnvironmentFile=/etc/kubernetes/scheduler
        ExecStart=/usr/bin/kube-scheduler $KUBE_SCHEDULER_ARGS
        Restart=on-failure
        LimitNOFILE=65536

        [Install]
        WantedBy=multi-user.target

配置文件/etc/kubernetes/scheduler的內容包括了kube-scheduler的全部啟動參數,主要的配置參數在變量KUBE_SCHEDULER_ARGS中指定:

        # cat /etc/kubernetes/scheduler
        KUBE_SCHEDULER_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig
    --logtostderr=false --log-dir=/var/log/kubernetes --v=0"

對啟動參數說明如下。

◎ --kubeconfig:設置與API Server連接的相關配置,可以與kube-controller-manager使用的kubeconfig文件相同。

◎ --logtostderr:設置為false表示將日志寫入文件,不寫入stderr。

◎ --log-dir:日志目錄。

◎ --v:日志級別。

配置完成后,執行systemctl start命令按順序啟動這3個服務,同時,使用systemctl enable命令將服務加入開機啟動列表中:

        # systemctl daemon-reload
        # systemctl enable kube-apiserver.service
        # systemctl start kube-apiserver.service
        # systemctl enable kube-controller-manager
        # systemctl start kube-controller-manager
        # systemctl enable kube-scheduler
        # systemctl start kube-scheduler

通過systemctl status <service_name>驗證服務的啟動狀態,running表示啟動成功。

至此,Master上所需的服務就全部啟動完成了。

2.3.2 Node上的kubelet、kube-proxy服務

在工作Node上需要預先安裝好Docker Daemon并且正常啟動。Docker的安裝和啟動詳見Docker官網http://www.docker.com的說明文檔。

1.kubelet服務

kubelet服務依賴于Docker服務,設置systemd服務配置文件/usr/lib/systemd/system/kubelet.service,內容如下:

        [Unit]
        Description=Kubernetes Kubelet Server
        Documentation=https://github.com/GoogleCloudPlatform/kubernetes
        After=docker.service
        Requires=docker.service

        [Service]
        WorkingDirectory=/var/lib/kubelet
        EnvironmentFile=/etc/kubernetes/kubelet
        ExecStart=/usr/bin/kubelet $KUBELET_ARGS
        Restart=on-failure

        [Install]
        WantedBy=multi-user.target

其中,WorkingDirectory表示kubelet保存數據的目錄,需要在啟動kubelet服務之前創建。

配置文件/etc/kubernetes/kubelet的內容包括了kubelet的全部啟動參數,主要的配置參數在變量KUBELET_ARGS中指定:

        # cat /etc/kubernetes/kubelet
        KUBELET_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig
    --hostname-override=192.168.18.3--logtostderr=false
    --log-dir=/var/log/kubernetes --v=0"

對啟動參數說明如下。

◎ --kubeconfig:設置與API Server連接的相關配置,可以與kube-controller-manager使用的kubeconfig文件相同。

◎ --hostname-override:設置本Node的名稱。

◎ --logtostderr:設置為false表示將日志寫入文件,不寫入stderr。

◎ --log-dir:日志目錄。

◎ --v:日志級別。

2.kube-proxy服務

kube-proxy服務依賴于network服務,設置systemd服務配置文件/usr/lib/systemd/system/kube-proxy.service,內容如下:

        [Unit]
        Description=Kubernetes Kube-Proxy Server
        Documentation=https://github.com/GoogleCloudPlatform/kubernetes
        After=network.target
        Requires=network.service

        [Service]
        EnvironmentFile=/etc/kubernetes/proxy
        ExecStart=/usr/bin/kube-proxy $KUBE_PROXY_ARGS
        Restart=on-failure
        LimitNOFILE=65536

        [Install]
        WantedBy=multi-user.target

配置文件/etc/kubernetes/proxy的內容包括了kube-proxy的全部啟動參數,主要的配置參數在變量KUBE_PROXY_ARGS中指定:

        # cat /etc/kubernetes/proxy
        KUBE_PROXY_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig --logtostderr=false
    --log-dir=/var/log/kubernetes --v=2"

對啟動參數說明如下。

◎ --kubeconfig:設置與API Server連接的相關配置,可以與kube-controller-manager使用的kubeconfig文件相同。

◎ --logtostderr:設置為false表示將日志寫入文件,不寫入stderr。

◎ --log-dir:日志目錄。

◎ --v:日志級別。

配置完成后,通過systemctl啟動kubelet和kube-proxy服務:

        # systemctl daemon-reload
        # systemctl enable kubelet.service
        # systemctl start kubelet.service
        # systemctl enable kube-proxy
        # systemctl start kube-proxy

kubelet默認采用向Master自動注冊本Node的機制,在Master上查看各Node的狀態,狀態為Ready表示Node已經成功注冊并且狀態為可用:

        # kubectl get nodes
        NAME               STATUS     AGE
        192.168.18.3      Ready      1m

等所有Node的狀態都為Ready之后,一個Kubernetes集群就啟動完成了。接下來可以創建Pod、Deployment、Service等資源對象來部署容器應用了。

主站蜘蛛池模板: 密云县| 祥云县| 类乌齐县| 那坡县| 石楼县| 溧阳市| 信丰县| 陆川县| 眉山市| 凭祥市| 石首市| 灌阳县| 汉寿县| 广宁县| 金山区| 本溪| 潼关县| 思南县| 桐城市| 都兰县| 宜宾市| 四子王旗| 虞城县| 吉林市| 沿河| 清远市| 连南| 云和县| 洛浦县| 铜山县| 登封市| 都匀市| 买车| 伊金霍洛旗| 林芝县| 固原市| 建昌县| 长治市| 望江县| 惠安县| 凤城市|