若是想要在Docker上部署大型應用,首先就是要解決網絡的問題,還有一系列複雜的問題,包括集羣管理,負載均衡等。此時就須要容器編排部署工具來解決這些問題。node
1、容器編排部署工具linux
容器管理工具能夠完成容器的基礎管理,可是容器的應用並非只能進行簡單應用部署的,可使用容器完成企業中更加複雜的應用部署,當須要對多應用的系統進行部署時,就須要更加複雜的工具來完成對容器運行應用的編排,這就是容器編排部署工具。nginx
容器編排部署工具備:程序員
(1)docker三劍客:docker machine、docker compose、docker swarm面試
(2)mesos+marathondocker
(3)kubernetesjson
2、Kubernetes介紹vim
kubernetes簡稱爲k8s,8是由於k和s之間有8個字母,是谷歌內部的Borg系統的開源版本,也是目前主流的容器編排部署工具。api
k8s是一個輕便的和可擴展的開源平臺,用於管理多個主機上的容器化的應用,讓部署容器化的應用簡單而且高效,提供了應用部署、規劃、更新、維護的一種機制,能進行應用的自動化部署及擴縮容。bash
如上圖所示,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
注:全部機器都要改動
二、關閉swap分區
kubernetes集羣部署必須關閉swap分區,不然會報錯,重啓生效(爲了搞這個,個人虛擬機搞崩兩臺)
vim /etc/fstab
註釋掉帶有swap的那一行
使用free -m查看是否已關閉,都是0表示已關閉
注:全部機器都要改動
三、添加網橋過濾
(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
注:全部機器都要改動
四、開啓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
注:全部機器都要改動
五、安裝docker
-->docker安裝
安裝以後,須要更改docker配置文件
vim /etc/docker/daemon.json #添加下面這行配置 { "exec-opts":["native.cgroupdriver=systemd"]}
注:全部機器都要改動
2、安裝k8s集羣
一、需安裝組件
kubeadm:初始化集羣、管理集羣等
kubelet:用於接收api-server指令,對pod生命週期進行管理
kubectl:集羣命令行管理工具
二、設置阿里雲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
注:全部機器都要改動
三、安裝組件
此處安裝版本爲1.16.0,按需改動版本
yum -y install kubeadm-1.16.0-0 kubelet-1.16.0-0 kubectl-1.16.0-0
注:全部機器都要安裝
四、配置kubelet
vim /etc/sysconfig/kubelet KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
配置開機自啓動:
systemctl enable kubelet
注:全部機器都要改動
五、查看須要下載的鏡像
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
由於k8s.gcr.io倉庫須要才能下載,因此使用gotok8s倉庫,而後在進行從新打標
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
六、集羣初始化
在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
七、驗證集羣是否可用
#獲取集羣節點 kubectl get nodes
#查看集羣健康情況 kubectl cluster-info
還有一種安裝方式:二進制文件安裝k8s集羣,比較麻煩,有空看一下怎麼搞。
===============================
我是Liusy,一個喜歡健身的程序員。
歡迎關注微信公衆號【Liusy01】,一塊兒交流Java技術及健身,獲取更多幹貨,領取Java進階乾貨、最新面試寶典,一塊兒成爲Java大神。
來都來了,關注一波再溜唄。