CentOS 7 離線部署K8S羣集

K8S介紹

首先,它是一個全新的基於容器技術的分佈式架構領先方案。Kubernetes(k8s)是Google開源的容器集羣管理系統(Google內部:Borg)。在Docker技術的基礎上,爲容器化的應用提供部署運行、資源調度、服務發現和動態伸縮等一系列完整功能,提高了大規模容器集羣管理的便捷性。
Kubernetes是一個完備的分佈式系統支撐平臺,具有完備的集羣管理能力,多擴多層次的安全防護和准入機制、多租戶應用支撐能力、透明的服務註冊和發現機制、內建智能負載均衡器、強大的故障發現和自我修復能力、服務滾動升級和在線擴容能力、可擴展的資源自動調度機制以及多粒度的資源配額管理能力。同時Kubernetes提供完善的管理工具,涵蓋了包括開發、部署測試、運維監控在內的各個環節。

Kubernetes中,Service是分佈式集羣架構的核心,一個Service對象擁有如下關鍵特徵:

擁有一個唯一指定的名字
擁有一個虛擬IP(Cluster IP、Service IP、或VIP)和端口號
能夠體統某種遠程服務能力
被映射到了提供這種服務能力的一組容器應用上

Kubernetes優勢:

容器編排
輕量級
開源
彈性伸縮
負載均衡

k8s概念

CentOS 7 離線部署K8S羣集

cluster

cluster是 計算、存儲和網絡資源的集合,k8s利用這些資源運行各種基於容器的應用。

master

master是cluster的大腦,他的主要職責是調度,即決定將應用放在那裏運行。master運行linux操作系統,可以是物理機或者虛擬機。爲了實現高可用,可以運行多個master。

node

node的職責是運行容器應用。node由master管理,node負責監控並彙報容器的狀態,同時根據master的要求管理容器的生命週期。node運行在linux的操作系統上,可以是物理機或者是虛擬機。

pod

pod是k8s的最小工作單元。每個pod包含一個或者多個容器。pod中的容器會作爲一個整體被master調度到一個node上運行。

CentOS 7 離線部署K8S羣集

controller

k8s通常不會直接創建pod,而是通過controller來管理pod的。controller中定義了pod的部署特性,比如有幾個劇本,在什麼樣的node上運行等。爲了滿足不同的業務場景,k8s提供了多種controller,包括deployment、replicaset、daemonset、statefulset、job等。

deployment

是最常用的controller。deployment可以管理pod的多個副本,並確保pod按照期望的狀態運行。

replicaset

實現了pod的多副本管理。使用deployment時會自動創建replicaset,也就是說deployment是通過replicaset來管理pod的多個副本的,我們通常不需要直接使用replicaset。

daemonset

用於每個node最多隻運行一個pod副本的場景。正如其名稱所示的,daemonset通常用於運行daemon。

statefuleset

能夠保證pod的每個副本在整個生命週期中名稱是不變的,而其他controller不提供這個功能。當某個pod發生故障需要刪除並重新啓動時,pod的名稱會發生變化,同時statefulset會保證副本按照固定的順序啓動、更新或者刪除。

job

用於運行結束就刪除的應用,而其他controller中的pod通常是長期持續運行的。

service

deployment可以部署多個副本,每個pod 都有自己的IP,外界如何訪問這些副本那?
答案是service
k8s的 service定義了外界訪問一組特定pod的方式。service有自己的IP和端口,service爲pod提供了負載均衡。
k8s運行容器pod與訪問容器這兩項任務分別由controller和service執行。

namespace

可以將一個物理的cluster邏輯上劃分成多個虛擬cluster,每個cluster就是一個namespace。不同的namespace裏的資源是完全隔離的。

Kubernetes架構:

服務分組,小集羣,多集羣
服務分組,大集羣,單集羣

Kubernetes 組件:

Kubernetes Master控制組件,調度管理整個系統(集羣),包含如下組件:

Kubernetes API Server

作爲Kubernetes系統的入口,其封裝了核心對象的增刪改查操作,以RESTful API接口方式提供給外部客戶和內部組件調用。維護的REST對象持久化到Etcd中存儲。

Kubernetes Scheduler

爲新建立的Pod進行節點(node)選擇(即分配機器),負責集羣的資源調度。組件抽離,可以方便替換成其他調度器。
  

Kubernetes Controller

負責執行各種控制器,目前已經提供了很多控制器來保證Kubernetes的正常運行。

Replication Controller

管理維護Replication Controller,關聯Replication Controller和Pod,保證Replication Controller定義的副本數量與實際運行Pod數量一致。
  

Node Controller

管理維護Node,定期檢查Node的健康狀態,標識出(失效|未失效)的Node節點。

Namespace Controller

管理維護Namespace,定期清理無效的Namespace,包括Namesapce下的API對象,比如Pod、Service等。

Service Controller

管理維護Service,提供負載以及服務代理。

EndPoints Controller

管理維護Endpoints,關聯Service和Pod,創建Endpoints爲Service的後端,當Pod發生變化時,實時更新Endpoints。

Service Account Controller

管理維護Service Account,爲每個Namespace創建默認的Service Account,同時爲Service Account創建Service Account Secret。

Persistent Volume Controller

管理維護Persistent Volume和Persistent Volume Claim,爲新的Persistent Volume Claim分配Persistent Volume進行綁定,爲釋放的Persistent Volume執行清理回收。

Daemon Set Controller

管理維護Daemon Set,負責創建Daemon Pod,保證指定的Node上正常的運行Daemon Pod。

Deployment Controller

管理維護Deployment,關聯Deployment和Replication Controller,保證運行指定數量的Pod。當Deployment更新時,控制實現Replication Controller和 Pod的更新。

Job Controller

管理維護Job,爲Jod創建一次性任務Pod,保證完成Job指定完成的任務數目

Pod Autoscaler Controller

實現Pod的自動伸縮,定時獲取監控數據,進行策略匹配,當滿足條件時執行Pod的伸縮動作。

K8S Node運行節點,運行管理業務容器,包含如下組件:

Kubelet

負責管控容器,Kubelet會從Kubernetes API Server接收Pod的創建請求,啓動和停止容器,監控容器運行狀態並彙報給Kubernetes API Server。

Kubernetes Proxy

負責爲Pod創建代理服務,Kubernetes Proxy會從Kubernetes API Server獲取所有的Service信息,並根據Service的信息創建代理服務,實現Service到Pod的請求路由和轉發,從而實現Kubernetes層級的虛擬轉發網絡。

Docker

Node上需要運行容器服務

環境配置

主機名 IP地址 角色 配置
master 192.168.0.110 主節點 2C 2G
master 192.168.0.104 工作節點 2C 2G
master 192.168.0.106 工作節點 2C 2G

備註:實驗環境的虛擬機至少2核2g

部署過程

一、軟件包下載上傳

1.百度網盤下載地址

鏈接:https://pan.baidu.com/s/1Qzs8tcf4O-8xlTmnl2Qx5g
提取碼:ah4y

二、服務器基礎環境優化(3臺操作相同)

1.關閉防護牆,安全性

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
systemctl stop firewalld
systemctl disable firewalld

2.服務器時間同步

timedatectl set-timezone Asia/Shanghai

3.修改主機名

hostnamectl set-hostname master &&bash
hostnamectl set-hostname node01 &&bash
hostnamectl set-hostname node02 &&bash

4.添加hosts文件

vim /etc/hosts #主機名解析
末尾添加:
192.168.0.110 master
192.168.0.104 node1
192.168.0.106 node2

其它2臺可以添加,也可以拷貝文件:

scp /etc/hosts [email protected]:/etc/hosts
scp /etc/hosts [email protected]:/etc/hosts

5.關閉交換內存swap

swapoff -a #臨時關閉
sed -i '12s/^\//#\//g' /etc/fstab #永久關閉

6.網橋設置

echo -e "net.bridge.bridge-nf-call-ip6tables = 1\nnet.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.d/k8s.conf
sysctl --system #使其生效

三、部署docker(3臺操作相同)

1.解壓安裝docker

tar -zxvf docker-ce-18.09.tar.gz
cd docker && yum localinstall *.rpm -y #yum安裝相關依賴

2.啓動docker

systemctl start docker
systemctl enable docker #開機啓動
docker version

3.docker加速器

vim /etc/docker/daemon.json #添加

{
"registry-mirrors": ["https://fskvstob.mirror.aliyuncs.com/"]
}

systemctl daemon-reload #重新加載

四、部署K8s羣集

3臺操作相同

1.解壓安裝k8s

cd ../
tar -zxvf kube114-rpm.tar.gz
cd kube114-rpm && yum localinstall *.rpm -y #yum解決依賴

2.導入k8s鏡像

cd ../
docker load -i k8s-114-images.tar.gz
docker load -i flannel-dashboard.tar.gz

注意:如果導入鏡像發生如下報錯:
CentOS 7 離線部署K8S羣集

報錯原因:鏡像壓縮包下載出問題了
解決辦法:重新下載或更換鏡像

3.查看k8s鏡像

docker images #共9個鏡像

CentOS 7 離線部署K8S羣集

只在master上面操作

4.master初始化

kubeadm init --kubernetes-version=v1.14.1 --pod-network-cidr=10.244.0.0/16

CentOS 7 離線部署K8S羣集

5.查看節點

kubectl get node

CentOS 7 離線部署K8S羣集

kubectl get pod --all-namespaces

CentOS 7 離線部署K8S羣集

6.配置KUBECONFIG變量

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
source /etc/profile
echo $KUBECONFIG #應該返回/etc/kubernetes/admin.conf

CentOS 7 離線部署K8S羣集

7.部署flannel網絡

kubectl create -f kube-flannel.yml
kubectl get node

CentOS 7 離線部署K8S羣集

在node節點服務器操作

8.kubeadm join 加入node節點

systemctl enable kubelet #添加開機啓動k8s
kubeadm join 192.168.0.110:6443 --token 2vjmyw.9p6cbn8m8oqs41ta \
--discovery-token-ca-cert-hash sha256:e4c1d3e9da26e2f488dec621122a30d8725762c20bf281519376ed0ae8c7204b

CentOS 7 離線部署K8S羣集

9.在master上面查看

kubectl get node

CentOS 7 離線部署K8S羣集

10.部署k8s UI界面(dashboard)

kubectl apply -f kubernetes-dashboard.yaml
kubectl apply -f admin-role.yaml
kubectl apply -f kubernetes-dashboard-admin.rbac.yaml
kubectl -n kube-system get svc

11.網頁驗證

CentOS 7 離線部署K8S羣集

參考資料:

1.參考文章https://www.jianshu.com/p/0e1a3412528e
2.參考老齊的k8s教學視頻
3.參考k8s官方中文文檔https://kubernetes.io/zh/docs/home/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章