天天看點

初識Kubernetes及快速安裝

之前幾篇介紹了Docker是什麼以及怎麼使用,但Docker隻是容器管理工具,如果想要在Docker上部署大型應用,首先就是要解決網絡的問題,還有一系列複雜的問題,包括叢集管理,負載均衡等。此時就需要容器編排部署工具來解決這些問題。

1

容器編排部署工具

容器管理工具可以完成容器的基礎管理,但是容器的應用并不是隻能進行簡單應用部署的,可以使用容器完成企業中更加複雜的應用部署,當需要對多應用的系統進行部署時,就需要更加複雜的工具來完成對容器運作應用的編排,這就是容器編排部署工具。

容器編排部署工具有:

(1)docker三劍客:docker machine、docker compose、docker swarm

(2)mesos+marathon

(3)kubernetes

2

Kubernetes介紹

初識Kubernetes及快速安裝

kubernetes簡稱為k8s,8是因為k和s之間有8個字母,是谷歌内部的Borg系統的開源版本,也是目前主流的容器編排部署工具。

k8s是一個輕便的和可擴充的開源平台,用于管理多個主機上的容器化的應用,讓部署容器化的應用簡單并且高效,提供了應用部署、規劃、更新、維護的一種機制,能進行應用的自動化部署及擴縮容。

初識Kubernetes及快速安裝

如上圖所示,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的那一行

初識Kubernetes及快速安裝

使用free -m檢視是否已關閉,都是0表示已關閉

初識Kubernetes及快速安裝

注:所有機器都要改動

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           

複制

初識Kubernetes及快速安裝

可以使用如下腳本下載下傳:

#!/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           

複制

初識Kubernetes及快速安裝
#檢視叢集健康狀況
kubectl cluster-info           

複制

初識Kubernetes及快速安裝

還有一種安裝方式:二進制檔案安裝k8s叢集,比較麻煩,有空看一下怎麼搞。