Kubernetes(K8S)集羣管理Docker容器(部署篇)



今天這篇文章教給大家如何快速部署一套Kubernetes集羣。K8S集羣部署有幾種方式:kubeadm、minikube和二進制包。前兩者屬於自動部署,簡化部署操作,並且minikube只是單機測試,而kubeadm還是beta版,強烈推薦初學者使用二進制包部署,因爲自動部署屏蔽了很多細節,使得對各個模塊感知很少,非常不利用學習。

所以,這篇文章也是使用二進制包部署Kubernetes集羣。


本章目錄

dfa248862503ddc2fef41329ff925866.png

一、架構拓撲圖

53e0a846f89d2cdcd6b194b90e852f76.png

二、環境規劃

角色

IP

組件

master

192.168.0.211

etcd

kube-apiserver

kube-controller-manager

kube-scheduler

node01

192.168.0.212

kubelet

kube-proxy

docker

node02

192.168.0.213

kubelet

kube-proxy

docker

環境說明:

操作系統:Ubuntu16.04 or CentOS7

Kubernetes版本:v1.8.3

Docker版本:v17.09-ce

均採用當前最新穩定版本。

關閉selinux。

三、部署集羣

3.1 下載二進制包

打開下面網址,下載下面兩個紅色框框的包。

https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.8.md#v183

 1e610818c915f4f97dafc14a19aa94fc.png

27ff88ecd5201140479dda9b02033c83.png

下載完成後,上傳到服務器:

kubernetes-server-linux-amd64.tar.gz上傳到master節點。

kubernetes-node-linux-amd64.tar.gz 上傳到node節點。

3.2  安裝etcd3

k8s-master# yum install etcd –y
k8s-master# vi /etc/etcd/etcd.conf 
ETCD_NAME="default"
ETCD_DATA_DIR="/var/lib/etcd/default"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379
k8s-master# systemctl enable etcd
k8s-master# systemctl start etcd


注意:Ubuntu系統etcd配置文件在/etc/default/etcd。

3.3 運行Master節點組件

k8s-master# tar zxvf kubernetes-server-linux-amd64.tar.gz
k8s-master# mkdir -p /opt/kubernetes/{bin,cfg}
k8s-master# mv kubernetes/server/bin/{kube-apiserver,kube-scheduler,kube-controller-manager,kubectl} /opt/kubernetes/bin

3.3.1 apiserver

創建配置文件:

# vi /opt/kubernetes/cfg/kube-apiserver
# 啓用日誌標準錯誤
KUBE_LOGTOSTDERR="--logtostderr=true"
# 日誌級別
KUBE_LOG_LEVEL="--v=4"
# Etcd服務地址
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.0.211:2379"
# API服務監聽地址
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
# API服務監聽端口
KUBE_API_PORT="--insecure-port=8080"
# 對集羣中成員提供API服務地址
KUBE_ADVERTISE_ADDR="--advertise-address=192.168.0.211"
# 允許容器請求特權模式,默認false
KUBE_ALLOW_PRIV="--allow-privileged=false"
# 集羣分配的IP範圍
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.10.10.0/24"

創建systemd服務文件:

# vi /lib/systemd/system/kube-apiserver.service 
[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes
[Service]
EnvironmentFile=-/opt/kubernetes/cfg/kube-apiserver
#ExecStart=/opt/kubernetes/bin/kube-apiserver ${KUBE_APISERVER_OPTS}
ExecStart=/opt/kubernetes/bin/kube-apiserver \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${KUBE_ETCD_SERVERS} \
${KUBE_API_ADDRESS} \
${KUBE_API_PORT} \
${KUBE_ADVERTISE_ADDR} \
${KUBE_ALLOW_PRIV} \
${KUBE_SERVICE_ADDRESSES}
Restart=on-failure
[Install]
WantedBy=multi-user.target

啓動服務,並設置開機啓動:

# systemctl daemon-reload
# systemctl enable kube-apiserver
# systemctl restart kube-apiserver

注意:apiserver默認支持etcd3,如果是etcd2,需啓動時指定版本選項--storage-backend=etcd2

3.3.2 scheduler

創建配置文件:

# vi /opt/kubernetes/cfg/kube-scheduler
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=4"
KUBE_MASTER="--master=192.168.0.211:8080"
KUBE_LEADER_ELECT="--leader-elect"

創建systemd服務文件:

# vi /lib/systemd/system/kube-scheduler.service
[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/kubernetes/kubernetes
[Service]
EnvironmentFile=-/opt/kubernetes/cfg/kube-scheduler
ExecStart=/opt/kubernetes/bin/kube-scheduler \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${KUBE_MASTER} \
${KUBE_LEADER_ELECT}
Restart=on-failure
[Install]
WantedBy=multi-user.target

啓動服務,並設置開機啓動:

# systemctl daemon-reload
# systemctl enable kube-scheduler
# systemctl restart kube-scheduler

3.3.3 controller-manager

創建配置文件:

# vi /opt/kubernetes/cfg/kube-controller-manager
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=4"
KUBE_MASTER="--master=192.168.0.211:8080"

創建systemd服務文件:

# vi /lib/systemd/system/kube-controller-manager.service
[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/kubernetes/kubernetes
[Service]
EnvironmentFile=-/opt/kubernetes/cfg/kube-controller-manager
ExecStart=/opt/kubernetes/bin/kube-controller-manager \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${KUBE_MASTER} \
${KUBE_LEADER_ELECT}
Restart=on-failure
[Install]
WantedBy=multi-user.target

啓動服務,並設置開機啓動:

# systemctl daemon-reload
# systemctl enable kube-controller-manager
# systemctl restart kube-controller-manager

3.3.4 小結

Master節點組件就全部啓動了,需要注意的是服務啓動順序有依賴,先啓動etcd,再啓動apiserver,其他組件無順序要求。

查看Master節點組件進程狀態:

0fd14ce58c9dfe66a4802e64e02aff8b.png

說明組件都在運行。

如果啓動失敗,請查看啓動日誌,例如:

#journalctl -u kube-apiserver

3.4  運行Node節點組件

k8s-node01# tar zxvf kubernetes-node-linux-amd64.tar.gz
k8s-node01# mkdir -p /opt/kubernetes/{bin,cfg}
k8s-node01# mv kubernetes/node/bin/{kubelet,kube-proxy} /opt/kubernetes/bin/

3.4.1 kubelet

創建kubeconfig配置文件:

# vi /opt/kubernetes/cfg/kubelet.kubeconfig
apiVersion: v1
kind: Config
clusters:
  - cluster:
      server: http://192.168.0.211:8080
    name: local
contexts:
  - context:
      cluster: local
    name: local
current-context: local

kubeconfig文件用於kubelet連接master apiserver。

創建配置文件:

# vi /opt/kubernetes/cfg/kubelet            
# 啓用日誌標準錯誤
KUBE_LOGTOSTDERR="--logtostderr=true"
# 日誌級別
KUBE_LOG_LEVEL="--v=4"
# Kubelet服務IP地址
NODE_ADDRESS="--address=192.168.0.212"
# Kubelet服務端口
NODE_PORT="--port=10250"
# 自定義節點名稱
NODE_HOSTNAME="--hostname-override=192.168.0.212"
# kubeconfig路徑,指定連接API服務器
KUBELET_KUBECONFIG="--kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig"
# 允許容器請求特權模式,默認false
KUBE_ALLOW_PRIV="--allow-privileged=false"
# DNS信息
KUBELET_DNS_IP="--cluster-dns=10.10.10.2"
KUBELET_DNS_DOMAIN="--cluster-domain=cluster.local"
# 禁用使用Swap
KUBELET_SWAP="--fail-swap-on=false"

創建systemd服務文件:

# vi /lib/systemd/system/kubelet.service
[Unit]
Description=Kubernetes Kubelet
After=docker.service
Requires=docker.service
[Service]
EnvironmentFile=-/opt/kubernetes/cfg/kubelet
ExecStart=/opt/kubernetes/bin/kubelet \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${NODE_ADDRESS} \
${NODE_PORT} \
${NODE_HOSTNAME} \
${KUBELET_KUBECONFIG} \
${KUBE_ALLOW_PRIV} \
${KUBELET_DNS_IP} \
${KUBELET_DNS_DOMAIN} \
${KUBELET_SWAP}
Restart=on-failure
KillMode=process
[Install]
WantedBy=multi-user.target

啓動服務,並設置開機啓動:

# systemctl daemon-reload
# systemctl enable kubelet
# systemctl restart kubelet

3.4.2 proxy

創建配置文件:

# vi /opt/kubernetes/cfg/kube-proxy            
# 啓用日誌標準錯誤
KUBE_LOGTOSTDERR="--logtostderr=true"
# 日誌級別
KUBE_LOG_LEVEL="--v=4"
# 自定義節點名稱
NODE_HOSTNAME="--hostname-override=192.168.0.212"
# API服務地址
KUBE_MASTER="--master=http://192.168.0.211:8080"

創建systemd服務文件:

# vi /lib/systemd/system/kube-proxy.service
[Unit]
Description=Kubernetes Proxy
After=network.target
[Service]
EnvironmentFile=-/opt/kubernetes/cfg/kube-proxy
ExecStart=/opt/kubernetes/bin/kube-proxy \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${NODE_HOSTNAME} \
${KUBE_MASTER}
Restart=on-failure
[Install]
WantedBy=multi-user.target

啓動服務,並設置開機啓動:

# systemctl daemon-reload
# systemctl enable kube-proxy
# systemctl restart kube-proxy

3.4.3 小結

其他節點加入集羣與node01方式相同,但需修改kubelet的--address和--hostname-override選項爲本機IP。

查看Node節點組件進程狀態:

02979dd7adf52d863fbaaf356a421cdf.png

說明組件都在運行。

如果啓動失敗,請查看啓動日誌,例如:

#journalctl -u kubelet

3.5 驗證集羣是否部署成功

設置可執行文件到系統變量,方便使用:

# echo "export PATH=$PATH:/opt/kubernetes/bin" >> /etc/profile
# source /etc/profile

查看集羣節點狀態:

a0ff4d58486157275e9adf01a26d5f72.png

兩個節點都加入到了kubernetes集羣,就此部署完成。


本章對應視頻:https://pan.baidu.com/s/1L-FjASEK849y03cfOTlU_Q


QQ技術羣,有需要的朋友可以加下:

Docker技術交流羣(719105297

Kubernetes技術交流羣(602965977


Kubernetes v1.12 二进制部署集群(HTTPS+RBAC)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章