初識Kubernetes及快速安裝

若是想要在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大神。

來都來了,關注一波再溜唄。

相關文章
相關標籤/搜索