今天這篇文章教給你們如何快速部署一套Kubernetes集羣。K8S集羣部署有幾種方式:kubeadm、minikube和二進制包。前二者屬於自動部署,簡化部署操做,而且minikube只是單機測試,而kubeadm仍是beta版,強烈推薦初學者使用二進制包部署,由於自動部署屏蔽了不少細節,使得對各個模塊感知不多,很是不利用學習。node
因此,這篇文章也是使用二進制包部署Kubernetes集羣。linux
本章目錄git
角色github |
IPweb |
組件docker |
masterapi |
192.168.0.211bash |
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。
打開下面網址,下載下面兩個紅色框框的包。
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節點。
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。
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
建立配置文件:
# 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
建立配置文件:
# 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
建立配置文件:
# 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
Master節點組件就所有啓動了,須要注意的是服務啓動順序有依賴,先啓動etcd,再啓動apiserver,其餘組件無順序要求。
查看Master節點組件進程狀態:
說明組件都在運行。
若是啓動失敗,請查看啓動日誌,例如:
#journalctl -u kube-apiserver
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/
建立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
建立配置文件:
# 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
其餘節點加入集羣與node01方式相同,但需修改kubelet的--address和--hostname-override選項爲本機IP。
查看Node節點組件進程狀態:
說明組件都在運行。
若是啓動失敗,請查看啓動日誌,例如:
#journalctl -u kubelet
設置可執行文件到系統變量,方便使用:
# echo "export PATH=$PATH:/opt/kubernetes/bin" >> /etc/profile # source /etc/profile
查看集羣節點狀態:
兩個節點都加入到了kubernetes集羣,就此部署完成。
本章對應視頻:https://pan.baidu.com/s/1L-FjASEK849y03cfOTlU_Q
QQ技術羣,有須要的朋友能夠加下:
Docker技術交流羣(719105297)
Kubernetes技術交流羣(602965977)