Kubernetes之集羣-部署

Kubernetes簡介

在Docker 作爲高級容器引擎快速發展的同時,在Google內部,容器技術已經應用了很多年,Borg系統運行管理着成千上萬的容器應用。
Kubernetes項目來源於Borg,可以說是集結了Borg設計思想的精華,並且吸收了Borg系統中的經驗和教訓。
Kubernetes對計算資源進行了更高層次的抽象,通過將容器進行細緻的組合,將最終的應用服務交給用戶。
Kubernetes的好處:
隱藏資源管理和錯誤處理,用戶僅需要關注應用的開發。
服務高可用、高可靠。
可將負載運行在由成千上萬的機器聯合而成的集羣中。
 

·Kubernetes集羣包含有節點代理kubelet和Master組件(APIs,scheduler,etc),一切都基於分佈式的存儲系統。

Kubernetes主要由以下幾個核心組件組成:
etcd:保存了整個集羣的狀態
apiserver:提供了資源操作的唯一入口,並提供認證、授權、訪問控制、API註冊和發現等機制
controller manager:負責維護集羣的狀態,比如故障檢測、自動擴展、滾動更新等
scheduler:負責資源的調度,按照預定的調度策略將Pod調度到相應的機器上
kubelet:負責維護容器的生命週期,同時也負責Volume(CVI)和網絡(CNI)的管理
Container runtime:負責鏡像管理以及Pod和容器的真正運行(CRI)
kube-proxy:負責爲Service提供cluster內部的服務發現和負載均衡
除了核心組件,還有一些推薦的Add-ons:
kube-dns:負責爲整個集羣提供DNS服務
Ingress Controller:爲服務提供外網入口
Heapster:提供資源監控
Dashboard:提供GUI
Federation:提供跨可用區的集羣
Fluentd-elasticsearch:提供集羣日誌採集、存儲與查詢

 

Kubernetes設計理念和功能其實就是一個類似Linux的分層架構

核心層:Kubernetes最核心的功能,對外提供API構建高層的應用,對內提供插件式應用執行環境
應用層:部署(無狀態應用、有狀態應用、批處理任務、集羣應用等)和路由(服務發現、DNS解析等)
管理層:系統度量(如基礎設施、容器和網絡的度量),自動化(如自動擴展、動態Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)
接口層:kubectl命令行工具、客戶端SDK以及集羣聯邦
生態系統:在接口層之上的龐大容器集羣管理調度的生態系統,可以劃分爲兩個範疇
Kubernetes外部:日誌、監控、配置管理、CI、CD、Workflow、FaaS、OTS應用、ChatOps等
Kubernetes內部:CRI、CNI、CVI、鏡像倉庫、Cloud Provider、集羣自身的配置和管理等

 

更多詳細的介紹可以參考官網


Kubernetes部署

實驗環境:

準備四臺虛擬機保證時間同步

首先安裝chrony軟件

然後打開vim /etc/chrony.conf,寫入內網地址server 172.25.0.250 iburst

systemctl enable --now chronyd

然後做好解析

172.25.0.1server1 reg.westos.org  #同時也要保證私有倉庫也要有解析

每臺主機都要部署docker服務我們將已經部署好的

scp docker-ce.repo server4:/etc/yum.repos.d/#拷貝一下yum源
yum install docker-ce#安裝

也要保證私有倉庫的節點均沒問題

然後我們創建一個k8s文件

vim k8s.repo

[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0

每個節點要設置網關,保證能上網

測試yum repolist

然後我們在server2中安裝軟件

將server2中的k8s.repo拷貝到server3和server4這樣我們就能安裝軟件了

scp k8s.repo server3:/etc/yum.repos.d/
scp k8s.repo server4:/etc/yum.repos.d/

然後在sever3和server4中安裝軟件

yum install -y kubelet kubeadm kubectl

然後保證每個節點的docker開機自啓動

systemctl enable --now docker

修改我們的驅動將cgroup改成systemd,編輯我們的文件daemon.json

然後systemctl daemon_reload    systemctl restart docker

將該配置文件fenbie拷貝到server3和server4中

禁用swap分區:
# swapoff -a
註釋掉/etc/fstab文件中的swap定義
 
安裝部署軟件kubeadm
systemctl enable --now kubelet設置開機自動啓
 

docker和kubeadm都要設置開機自啓動

默認從k8s.gcr.io上下載組件鏡像,需要翻牆纔可以,所以需要修改鏡像倉庫

kubeadm config images list 

指定鏡像地址

我們將鏡像上傳到我們的私有倉庫上,

先做認證

然後在harbor上穿件一個項目,把我們的鏡像上傳到裏面去,先找到要上傳的鏡像然後重命名

然後上傳

手動測試拉取我們項目中的鏡像

                                                                      •# kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository registry.aliyuncs.com/google_containers  //初始化集羣       --pod-network-cidr=10.244.0.0/16  //使用flannel網絡組件時必須添加

--kubernetes-version   //指定k8s安裝版本

然後刪除這些拉取的鏡像我們要讓他們自動拉取,然後做初始化

去其他節點查看

根據提示創建一個用戶

                                                                                          

因爲不能tab鍵補齊了根據提示

根據官網提示

 

POD管理

Pod是可以創建和管理Kubernetes計算的最小可部署單元,一個Pod代表着集羣中運行的一個進程,每個pod都有一個唯一的ip   一個pod類似一個豌豆莢,包含一個或多個容器(通常是docker),多個容器間共享IPC、Network和UTC namespace。

創建pod應用

集羣內部任意節點可以訪問Pod,但集羣外部無法直接訪問

刪除pod節點

默認管理端不參與調度

先利用命令行

我們做一個拉伸

                                  service是一個抽象概念,定義了一個服務的多個pod邏輯合集和訪問pod的策略,一般把service稱爲微服務。

創建service

$ kubectl expose deployment nginx --port=80 --target-port=80

此時pod客戶端可以通過service的名稱訪問後端的兩個Pod

ClusterIP: 默認類型,自動分配一個僅集羣內部可以訪問的虛擬IP

kubectl expose deployment myapp --port=80 --target-port=80

查看更多的細節

查看能否負載均衡後端

我們也可以進行伸縮做成兩個副本

使用NodePort類型暴露端口,讓外部客戶端訪問Pod

 kubectl edit svc nginx  //修改service的type爲NodePort

kubectl expose deployment nginx --port=80 --target-port=80 --type=NodePort  //也可以在創建service時指定類型

kubectl edit svc myapp

修改service的type爲NodePort

NodePort: 在ClusterIP基礎上爲Service在每臺機器上綁定一個端口,這樣就可以通過  NodeIP:NodePort 來訪問該服務

查看端口號然後訪問

Pod擴容與縮容

 kubectl scale --replicas=6 deployment  nginx

 kubectl scale --replicas=3 deployment  nginx

更新pod鏡像

kubectl set image deployment nginx nginx=nginx:1.16.0  --record

回滾:

kubectl rollout history deployment nginx  //查看歷史版本

kubectl rollout undo deployment nginx --to-revision=1  //回滾版本

資源清單

格式如下
apiVersion: group/version  //指明api資源屬於哪個羣組和版本,同一個組可以有多個版本

        $ kubectl api-versions  //查詢命令

kind:   //標記創建的資源類型,k8s主要支持以下資源類別

       Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Cronjob

      •metadata:  //元數據

        name:  //對像名稱

        namespace:  //對象屬於哪個命名空間

        labels:  //指定資源標籤,標籤是一種鍵值數

spec:   //定義目標資源的期望狀態
$ kubectl explain pod  //查詢幫助文檔

vim .vimrc

 

修改我們的資源清單創建一個pod

創建兩個pod

也可以再pod.yaml

添加一個tty:true

我們也可以在我們的pod文件上添加端口和映射

指定資源運行的上限

我們修改pod文件將調度改到server3中

 

 

 

 

 

 

 

 

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