1. 程式人生 > >Kubernetes(K8S)+docker容器集群

Kubernetes(K8S)+docker容器集群

ted tar.gz pri docke use 3.1 fault leader 安裝

Kubernetes(k8s)

Kubernetes官網

Kubernetes使用教程

Docker-ce安裝官方教程

Kubernetes簡介

Kubernetes是google開源的多主機容器管理工具, 簡稱:k8s,它帶有人性化圖形管理界面, 它在開源社區很受歡迎github上已經有了20000+的收藏,和7000+的fork。

Kubernetes其特性主要包括:

1、可以非常輕松地開發復雜系統;

2、Kubernetes為微服務架構;

3、系統可以隨時隨地整體“搬遷”到公有雲上;

4、Kubernetes系統架構具備了超強的橫向擴容能力。

Kubernetes使用的資源對象

在Kubernetes中,Node、Pod、Replication Controller、Service等概念都可以看作一種資源對象,通過Kubernetes提供的Kubectl工具或者API調用進行操作,並保存在etcd中。

實驗環境

系統版本:centos7x3.10.0-514.el7.x86_64

Kubernetes版本:v1.8.3

Docker版本:docker-ce.x86_64 0:18.03.1.ce-1.el7.centos

註:以上最好兩個均采用當前最新穩定版本。

關閉防火墻並禁止開機自啟

systemctl stop firewalld.service
systemctl disable firewalld

關閉selinux
sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g‘ /etc/sysconfig/selinux

重啟 reboot

搭建k8s集群

master主機(IP:192.168.152.170)

安裝組件:etcd kube-apiserver kube-controller-manager kube-scheduler

1、安裝kubernetes服務端

1)下載二進制源碼包

wget https://dl.k8s.io/v1.8.3/kubernetes-server-linux-amd64.tar.gz
註:直接在master服務器上執行命令下載即可!

2)解壓源碼包

tar zxf kubernetes-server-linux-amd64.tar.gz
技術分享圖片

3)遞歸創建kubernetes運行文件存放目錄

mkdir -p /k8s/{bin,cfg}

4)將解壓目錄裏的文件移動到新創建的目錄裏

mv kubernetes/server/bin/{kube-apiserver,kube-controller-manager,kube-scheduler,kubectl} /k8s/bin/
技術分享圖片

2、安裝etcd組件(默認版本:etcd.x86_64 0:3.2.22-1.el7)

1)安裝etcd

yum -y install etcd

2)編輯etcd的配置文件

vi /etc/etcd/etcd.conf

ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_NAME="default"
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"
技術分享圖片
註:Ubuntu系統etcd配置文件在/etc/default/etcd。

3)啟動etcd服務

#設置etcd服務開機自啟

systemctl enable etcd

#啟動etcd服務

systemctl start etcd

3、配置kube-apiserver組件

1)創建kube-apiserver配置文件

vi /k8s/cfg/kube-apiserver

#啟用日誌標準錯誤
KUBE_LOGTOSTDERR="--logtostderr=true"
#日誌級別
KUBE_LOG_LEVEL="--v=4"
#Etcd服務地址
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.152.170: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.152.170"
#允許容器請求特權模式,默認false
KUBE_ALLOW_PRIV="--allow-privileged=false"
#集群分配的IP範圍
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.0.100.0/24"

技術分享圖片

2)創建kube-apiserver的systemd服務啟動文件

vi /lib/systemd/system/kube-apiserver.service

[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes
[Service]
EnvironmentFile=-/k8s/cfg/kube-apiserver
#ExecStart=/k8s/bin/kube-apiserver ${KUBE_APISERVER_OPTS}
ExecStart=/k8s/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

技術分享圖片

3)啟動kube-apiserver服務

#重新加載kube-apiserver服務守護進程

systemctl daemon-reload

#設置kube-apiserver服務開機自啟

systemctl enable kube-apiserver

#重啟kube-apiserver服務

systemctl restart kube-apiserver

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

4、配置kube-scheduler組件

1)創建kube-scheduler配置文件

vi /k8s/cfg/kube-scheduler

#啟用日誌標準錯誤
KUBE_LOGTOSTDERR="--logtostderr=true"
#日誌級別
KUBE_LOG_LEVEL="--v=4"
#k8s-master服務地址
KUBE_MASTER="--master=192.168.152.170:8080"
#指定master為控制臺
KUBE_LEADER_ELECT="--leader-elect"

技術分享圖片

2)創建kube-scheduler的systemd服務啟動文件

vi /lib/systemd/system/kube-scheduler.service

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

技術分享圖片

3)啟動kube-scheduler服務

#重新加載kube-scheduler服務守護進程

systemctl daemon-reload

#設置kube-scheduler服務開機自啟

systemctl enable kube-scheduler

#重新啟動kube-scheduler服務

systemctl restart kube-scheduler

5、配置kube-controller-manager組件

1)創建kube-controller-manager配置文件

vi /k8s/cfg/kube-controller-manager

#啟用日誌標準錯誤
KUBE_LOGTOSTDERR="--logtostderr=true"
#日誌級別
KUBE_LOG_LEVEL="--v=4"
#k8s-master服務地址
KUBE_MASTER="--master=192.168.152.170:8080"

技術分享圖片

2)創建kube-controller-manager的systemd服務啟動文件

vi /lib/systemd/system/kube-controller-manager.service

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

技術分享圖片

3)啟動kube-controller-manager服務

#重新加載kube-controller-manager服務守護進程

systemctl daemon-reload

#設置kube-controller-manager服務開機自啟

systemctl enable kube-controller-manager

#重新啟動kube-controller-manager服務

systemctl restart kube-controller-manager

註:master節點組件全部啟動了,需要註意的是服務啟動順序有依賴,先啟動etcd,再啟動apiserver,其他組件無順序要求。

查看master節點組件進程狀態 ps -ef | grep kube
技術分享圖片
註:以上截圖說明所有組件都正常運行!如果單獨一個組件啟動失敗可以使用k8s自帶查看日誌命令。

6、K8s查看具體組件日誌的命令

journalctl –u etcd

journalctl -u kube-apiserver

journalctl -u kube-controller-manager

journalctl -u kube-scheduler

node-1主機(192.168.152.168)

安裝組件:kubelet kube-proxy docker

1、安裝kubernetes的node-1節點

Kubernetes(K8S)+docker容器集群