CentOS 7 離線部署K8S羣集

K8S介紹

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

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

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

Kubernetes優點:

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

k8s概念

CentOS 7 離線部署K8S羣集

cluster

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

master

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

node

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

pod

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

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 CentOS 7.6
node01 192.168.0.104 工做節點 2C 2G CentOS 7.6
node02 192.168.0.106 工做節點 2C 2G CentOS 7.6

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

部署過程

1、軟件包下載上傳

1.百度網盤下載地址

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

2、服務器基礎環境優化(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 root@192.168.0.104:/etc/hosts
scp /etc/hosts root@192.168.0.106:/etc/hosts

5.免密交互(只在master上)

ssh-keygen #生成公鑰
ssh-copy-id -i .ssh/id_rsa.pub root@node1
ssh-copy-id -i .ssh/id_rsa.pub root@node2
ssh-copy-id -i .ssh/id_rsa.pub root@master
ssh root@node1 #測試鏈接

6.關閉交換內存swap

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

7.網橋設置

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

3、部署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 #從新加載

4、部署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羣集

若出現這種報錯:
CentOS 7 離線部署K8S羣集

解決方法:

echo "1" >> /proc/sys/net/ipv4/ip_forward

CentOS 7 離線部署K8S羣集

5.查看節點

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
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 #不要複製這個,要拷貝系統生成的token才行!

CentOS 7 離線部署K8S羣集

注意:若出現和master系統報錯,相同辦法解決便可!

echo "1" >> /proc/sys/net/ipv4/ip_forward

9.在master上面查看

kubectl get node

CentOS 7 離線部署K8S羣集

10.部署k8s UI界面(dashboard), 只在master上面

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.網頁驗證

訪問地址 :http://ip:32000

CentOS 7 離線部署K8S羣集

參考資料:

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

相關文章
相關標籤/搜索