之前幾篇介紹了Docker是什麼以及怎麼使用,但Docker隻是容器管理工具,如果想要在Docker上部署大型應用,首先就是要解決網絡的問題,還有一系列複雜的問題,包括叢集管理,負載均衡等。此時就需要容器編排部署工具來解決這些問題。
1
容器編排部署工具
容器管理工具可以完成容器的基礎管理,但是容器的應用并不是隻能進行簡單應用部署的,可以使用容器完成企業中更加複雜的應用部署,當需要對多應用的系統進行部署時,就需要更加複雜的工具來完成對容器運作應用的編排,這就是容器編排部署工具。
容器編排部署工具有:
(1)docker三劍客:docker machine、docker compose、docker swarm
(2)mesos+marathon
(3)kubernetes
2
Kubernetes介紹
kubernetes簡稱為k8s,8是因為k和s之間有8個字母,是谷歌内部的Borg系統的開源版本,也是目前主流的容器編排部署工具。
k8s是一個輕便的和可擴充的開源平台,用于管理多個主機上的容器化的應用,讓部署容器化的應用簡單并且高效,提供了應用部署、規劃、更新、維護的一種機制,能進行應用的自動化部署及擴縮容。
如上圖所示,k8s叢集是Master和Worker的模式。
Master節點上有kube-apiserver、kube-controller-mansger、kube-scheduler以及etcd程序,分别用于接收用戶端請求并控制叢集、資源對象的控制中心并監控容器健康、資源排程、資源對象資料存儲等功能。
Worker節點上有kubelet、kube-proxy、docker,分别用于管理Pod及Pod容器并定時向Master彙報節點資源資訊、實作Service的透明代理及負載均衡、運作容器。
3
k8s主要功能介紹
(1)自動裝箱
基于容器對應用運作環境的資源配置要求自動部署應用容器
(2)自我修複
當容器失敗時,會對容器進行重新開機
當所部署的Node節點當機時,會對容器進行重新部署和重新排程
當容器未通過監控檢查時,會關閉此容器,直到容器正常運作時,才會對外提供服務。
(3)水準擴充
通過簡單的指令、使用者UI界面或基于CPU等資源使用情況,對應用容器進行擴容或縮容
(4)服務發現
不需要使用額外的服務發現機制,k8s自身具備服務發現和負載均衡
(5)滾動更新
可根據應用的變化,對應用容器運作的應用,進行一次性或批量的更新
(6)版本回退
可根據應用部署情況,對應用容器運作的應用,進行曆史版本回退
(7)密鑰和配置管理
在不需要重新建構鏡像的情況下,可以部署、更新密鑰和應用配置,類似熱部署
(8)存儲編排
自動實作存儲系統挂載及應用,特别對有狀态應用應用實作資料持久化特别重要
存儲系統可以是本地目錄,網絡存儲、公共雲存儲服務等。
4
快速安裝
一、準備
1、禁用SELINUX,目的是為了讓容器可以讀取主機檔案系統,重新開機生效
vim /etc/selinux/config
将
SELINUX=enforcing
改成
SELINUX=disabled
複制
注:所有機器都要改動
2、關閉swap分區
kubernetes叢集部署必須關閉swap分區,否則會報錯,重新開機生效(為了搞這個,我的虛拟機搞崩兩台)
vim /etc/fstab
複制
注釋掉帶有swap的那一行
使用free -m檢視是否已關閉,都是0表示已關閉
注:所有機器都要改動
3、添加網橋過濾
(1)添加網橋過濾及位址轉發
vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-ng-call-ip6tables = 1
net.bridge.bridge-ng-call-iptables = 1
net.ipv4.ip_forword = 1
複制
(2)使用下列指令加載br_netfilter子產品
modprobe br_netfilter
複制
(3)使用下列指令檢視是否已加載
lsmod | grep br_netfilte
複制
(4)使用下列指令加載網橋過濾檔案
sysctl -p /etc/sysctl.d/k8s.conf
複制
注:所有機器都要改動
4、開啟IPVS
(1)安裝ipset、ipvsadm
yum -y install ipset ipvsadm
複制
(2)添加需要加載的子產品
vim /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
複制
(3)運作上述腳本
sh /etc/sysconfig/modules/ipvs.modules
複制
檢視是否已加載:
lsmod | grep ip_vs
複制
注:所有機器都要改動
5、安裝docker
-->docker安裝
安裝之後,需要更改docker配置檔案
vim /etc/docker/daemon.json
#添加下面這行配置
{
"exec-opts":["native.cgroupdriver=systemd"]
}
複制
注:所有機器都要改動
二、安裝k8s叢集
1、需安裝元件
kubeadm | kubelet | kubectl |
---|---|---|
初始化叢集、管理叢集等 | 用于接收api-server指令,對pod生命周期進行管理 | 叢集指令行管理工具 |
2、設定阿裡雲yum源
vim /etc/yum.repos.d/k8s.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
複制
檢視kubeadm最新版本
yum list | grep kubeadm
複制
注:所有機器都要改動
3、安裝元件
此處安裝版本為1.16.0,按需改動版本
yum -y install kubeadm-1.16.0-0 kubelet-1.16.0-0 kubectl-1.16.0-0
複制
注:所有機器都要安裝
4、配置kubelet
vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
複制
配置開機自啟動:
systemctl enable kubelet
複制
注:所有機器都要改動
5、檢視需要下載下傳的鏡像
Master機器上需要的鏡像可以用下列指令檢視:
kubeadm config images list
複制
可以使用如下腳本下載下傳:
#!/bin/bash
img_list='
gotok8s/kube-apiserver:v1.16.0
gotok8s/kube-controller-manager:v1.16.0
gotok8s/kube-scheduler:v1.16.0
gotok8s/kube-proxy:v1.16.0
gotok8s/pause:3.1
gotok8s/etcd:3.3.15-0
gotok8s/coredns:1.6.2
'
#拉取鏡像
for img in ${img_list}
do
docker pull $img
done
#使用docker tag重新打标
for img in ${img_list}
do
docker tag $img k8s.gcr.io${img:7}
done
#删除不需要的鏡像
for img in ${img_list}
do
docker rmi $img
done
複制
Worker節點上的需要如下鏡像
k8s.gcr.io/kube-proxy:v1.16.0
k8s.gcr.io/pause:3.1
複制
可以使用Docker鏡像導入導出指令:
#導出
docker save -o kube-proxy.tar k8s.gcr.io/kube-proxy:v1.16.0
#導入
docker load -i kube-proxy.tar
複制
6、叢集初始化
在master節點上使用如下指令,包括指定kubernetes版本以及目前主機ip
kubeadm init --kubernetes-version=v1.16.0 --apiserver-advertise-address=192.168.197.100
複制
會進行叢集初始化以及各種證書的建立操作等。
出現如下内容說明初始化成功,裡面包含接下來需要的操作,包括配置檔案拷貝以及節點加入叢集。
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.197.100:6443 --token cmx34b.juizw6tp9ptlgg9i \
--discovery-token-ca-cert-hash sha256:77661093886eb76ffa7595e200a4ce2a5b20f02c164f4946956dff16d941a1e7
複制
(1)根目錄下建立".kube"檔案夾
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
複制
(2)使用如下指令安裝網絡插件weave
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
複制
(3)将worker節點加入叢集中
在workder節點上執行如下指令
kubeadm join 192.168.197.100:6443 --token cmx34b.juizw6tp9ptlgg9i \
--discovery-token-ca-cert-hash sha256:77661093886eb76ffa7595e200a4ce2a5b20f02c164f4946956dff16d941a1e7
複制
7、驗證叢集是否可用
#擷取叢集節點
kubectl get nodes
複制
#檢視叢集健康狀況
kubectl cluster-info
複制
還有一種安裝方式:二進制檔案安裝k8s叢集,比較麻煩,有空看一下怎麼搞。