Kubernetes測試環境minikube部署(理論+實戰!!!)

Kubernetes的概述

Kubernetes是一個開源的Docker容器編排系統,Kubernetes簡稱K8S。
調度計算集羣的節點,動態管理上面的作業
通過使用[labels]和[pods]的概念,將應用按邏輯單元進行分組

K8S用於容器應用程序的部署,擴展和管理
K8S提供了容器編排,資源調度,彈性伸縮,部署管理,服務發現等一系列功能
Kubernetes目標是讓部署容器化應運簡單高效
官方網站:http://www.kubernetes.io

Kubernetes的特性

自我修復:

在節點故障時重新啓動失敗的容器,替換和重新部署,保證預測的副本數量;殺死健康檢查失敗的容器,並且在未準備好之前不會處理客戶端請求,確保線上服務不中斷。


彈性伸縮:

使用命令、UI或者基於CPU使用情況自動快速擴容和縮容應用程序實例,保證應用業務高峯併發時的高可用性;業務低峯時回收資源,以最小成本運行服務


自動部署和回滾:

K8S採用滾動更新應用,一次更新一個Pod,而不是同時刪除所有Pod,如果更新過程中出現問題,將回滾更改,確保升級不受影響業務


服務發現和負載均衡:

K8S爲多個容器提供一個統一的訪問入口(內部IP地址和UI個DNS地址),並且負載均衡關聯的所有容器,使得用戶無需考慮容器IP問題


機密和配置管理:

管理機密數據和應用程序配置。而不需要把敏感數據暴露在鏡像裏,提高敏感數據安全性。並且可以將一些常用的配置存儲在K8S中,方便應用程序使用


存儲編排:

掛載外部存儲系統,無論是來自本地存儲,公有云(如AWS),還是網絡存儲(NFS、GlusterFS)都作爲集羣資源的一部分使用,極大提高存儲使用靈活性


批處理:

提供一次性任務,定時任務;滿足批量數據處理和分析的場景。

Kubernetes集羣的架構與組件

Kubernetes測試環境minikube部署(理論+實戰!!!)
Kubernetes測試環境minikube部署(理論+實戰!!!)

master組件

kube-apiserver:

Kubernetes API,集羣的統一入口,各組件協調者,以RESTful API提供接口服務,所有對象資源的增刪改查和監聽操作都交給APIServer處理後再提交給Etcd存儲。


kube-controller-manager:

處理集羣中常規後臺任務,一個資源對應一個控制器,而ControllerManager就是負責管理這些控制器的


kube-scheduler:

根據調度算法爲新創建的Pod選擇一個Node節點,可以任意部署,可以部署在同一個節點上,也可以部署在不同的節點上


etcd:

分佈式鍵值存儲系統,用於保存集羣狀態數據,比如Pod、Server等對象信息。

node組件

kubelet:

kubelet是MAster在Node節點上的Agent,管理本機運行容器的生命週期,比如創建容器,Pod掛載數據卷、下載secret、獲取容器和節點狀態等工作。kubelet將Pod轉換成一組容器。


kube-proxy:

在Noed節點上實現Pod網絡代理,維護網絡規劃和四層復=負載均衡工作


docker或rocket:

容器引擎,運行容器

Kubernetes核心概念

Kubernetes測試環境minikube部署(理論+實戰!!!)

Pod:

最小部署單元
一組容器的集合
一個Pod中的容器共享網絡命名空間
Pod是短暫的


Controllers:

ReplicaSet:確保 預期的Pod副本數量
Deployment :無狀態應用部署
StatefulSet: 有狀態應用部署
DaemonSet :確保所有Node運行同一個Pod
Job:一次性任務
Cronjob: 定時任務
更高級層次對象,部署和管理Pod


Service:

防止Pod失聯
定義一組Pod的訪問策略
Label: 標籤,附加到某個資源上,用於關聯對象。查詢和篩選
Namespaces: 命名空間, 將對象邏輯上隔離
Annotations: 註釋

flannel容器集羣網絡部署

Overlay Network:

覆蓋網絡,在基礎網絡上疊加的一種 虛擬網絡技術模式,該網絡中的主機通過虛擬鏈路連接起來。

VXLAN:

將源數據包封裝到UDP中,並使用基礎網絡的IP/MAC作爲外層報文頭進行封裝,然後在以太網上傳輸,到達目的地後由隧道端點解封裝並將數據發送給目標地址。

Flannel:

是Overlay網絡的一 一種, 也是將源數據包封裝在另- -種網絡包裏面進行路由轉發和通信,目前已經支持UDP、VXLAN、AWS VPC和GCE路由等數據轉發方。

Kubernetes測試環境minikube部署(理論+實戰!!!)

Kubernetes測試環境minikube部署(理論+實戰!!!)

minikube

minikube是一個工具,可以在本地快速運行一個單點的kubernetes,僅用於嘗試k8s或日常開發的用戶使用

實驗環境

master 192.168.13.131  安裝etcd kubernetes flannel
node    192.168.13.132  安裝flannel kubernetes

1、在master上配置etcd

[root@promote ~]# yum install etcd kubernetes flannel -y   ##安裝組件
[root@promote ~]# vim /etc/etcd/etcd.conf  ##配置etcd配置文件
    3 ETCD_DATA_DIR="/var/lib/etcd/default.etcd"  ##數據目錄
    6 ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"  ##監聽任意網絡和端口
    9 ETCD_NAME="default"  ##默認名稱
 21 ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"  ##羣集訪問地址段落

2、在master上配置apiserver

 [root@promote ~]# vim /etc/kubernetes/apiserver ##配置apiserver配置文件
     8 KUBE_API_ADDRESS="--address=0.0.0.0"  ##修改api地址
 11 KUBE_API_PORT="--port=8080"  ##api監聽端口號
 14 KUBELET_PORT="--kubelet-port=10250"  ##kubelet端口號
 17 KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:2379"   ##etcd服務地址
 20 KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16" ##服務地址池
 23 KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExis    ts,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"
 ##控制器模式
 26 KUBE_API_ARGS=""  ##api參數

3、在master上配置flannel網絡

[root@promote ~]# vim /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://192.168.13.131:2379"   ##修改etcd地址爲本機的地址
FLANNEL_ETCD_PREFIX="/atomic.io/network"  ##網絡指定文件

4、在master上啓動所有服務

[root@promote ~]# for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do systemctl restart $SERVICES; systemctl enable $SERVICES ; systemctl status $SERVICES; done
##啓動 etcd kube-apiserver kube-controller-manager kube-scheduler四個服務,設置開機自啓並查看狀態

5、在master上設置etcd網絡

[root@promote ~]# etcdctl -C //192.168.13.131:2379 set /atomic.io/network/config '{"Network":"10.1.0.0/16"}'
[root@promote ~]# systemctl stop firewalld.service   ##關閉防火牆
[root@promote ~]# setenforce 0

6、在node服務器配置kubernetes配置文件

[root@promote ~]# yum install flannel kubernetes -y
[root@promote ~]# vim /etc/kubernetes/config
 13 KUBE_LOGTOSTDERR="--logtostderr=true"  ##錯誤日誌
 16 KUBE_LOG_LEVEL="--v=0"  ##級別
 19 KUBE_ALLOW_PRIV="--allow-privileged=false"  ##權限
 22 KUBE_MASTER="--master=http://192.168.13.131:8080"   ##指定master地址
 23 KUBE_ETCD_SERVERS="--etcd_server=http://192.168.13.131:2379"  ##指定etcd地址

7、在node配置kubelet配置文件

[root@promote ~]# vim /etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=0.0.0.0"  ##所有地址
KUBELET_PORT="--port=10250"   ##端口號
KUBELET_HOSTNAME="--hostname-override=192.168.13.132"  ##本地主機地址
KUBELET_API_SERVER="--api-servers=http://192.168.13.131:8080"  ##apiserver地址
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
##pod容器
KUBELET_ARGS=""  ##參數

8、在node配置flannel網絡配置文件

[root@promote ~]# vim /etc/sysconfig/flanneld 
FLANNEL_ETCD_ENDPOINTS="http://192.168.13.131:2379"  ##指定etcd服務地址

9、在node開啓所有服務

[root@promote ~]# systemctl stop firewalld.service   ##關閉防火牆
[root@promote ~]# setenforce 0
[root@promote ~]# for SERVICES in flanneld kube-proxy kubelet docker; do systemctl restart $SERVICES; systemctl enable $SERVICES; systemctl status $SERVICES; done
##開啓flanneld kube-proxy kubelet docker服務

10、在master服務器上查看node節點

[root@promote ~]# kubectl get nodes
NAME             STATUS    AGE
192.168.13.132   Ready     1m
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章