Kubernetes(K8S)集群管理Docker容器(部署篇)
今天這篇文章教給大家如何快速部署一套Kubernetes集群。K8S集群部署有幾種方式:kubeadm、minikube和二進制包。前兩者屬於自動部署,簡化部署操作,我們這裏強烈推薦初學者使用二進制包部署,因為自動部署屏蔽了很多細節,使得對各個模塊感知很少,非常不利用學習。
所以,這篇文章也是使用二進制包部署Kubernetes集群。
本章目錄
一、架構拓撲圖
二、環境規劃
角色 | 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
下載完成後,上傳到服務器:
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節點組件進程狀態:
說明組件都在運行。
如果啟動失敗,請查看啟動日誌,例如:
#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節點組件進程狀態:
說明組件都在運行。
如果啟動失敗,請查看啟動日誌,例如:
#journalctl -u kubelet
3.5 驗證集群是否部署成功
設置可執行文件到系統變量,方便使用:
# echo "export PATH=$PATH:/opt/kubernetes/bin" >> /etc/profile # source /etc/profile
查看集群節點狀態:
兩個節點都加入到了kubernetes集群,就此部署完成。
博主會繼續更新Kubernetes相關文章,有需要的朋友可以關註下。
本文出自 “李振良的技術博客” 博客,請務必保留此出處http://lizhenliang.blog.51cto.com/7876557/1983392
Kubernetes(K8S)集群管理Docker容器(部署篇)