簡介
kubernetes,簡稱K8s,是用8代替8個字符“ubernete”而成的縮寫。是一個開源的,用于管理云平臺中多個主機上的容器化的應(yīng)用,Kubernetes的目標(biāo)是讓部署容器化的應(yīng)用簡單并且高效(powerful),Kubernetes提供了應(yīng)用部署,規(guī)劃,更新,維護(hù)的一種機制。
Kubernetes是Google開源的一個容器編排引擎,它支持自動化部署、大規(guī)??缮炜s、應(yīng)用容器化管理。在生產(chǎn)環(huán)境中部署一個應(yīng)用程序時,通常要部署該應(yīng)用的多個實例以便對應(yīng)用請求進(jìn)行負(fù)載均衡。
在Kubernetes中,我們可以創(chuàng)建多個容器,每個容器里面運行一個應(yīng)用實例,然后通過內(nèi)置的負(fù)載均衡策略,實現(xiàn)對這一組應(yīng)用實例的管理、發(fā)現(xiàn)、訪問,而這些細(xì)節(jié)都不需要運維人員去進(jìn)行復(fù)雜的手工配置和處理。
基本概念
Kubernetes 中的絕大部分概念都抽象成 Kubernetes 管理的一種資源對象
- Master:Master 節(jié)點是 Kubernetes 集群的控制節(jié)點,負(fù)責(zé)整個集群的管理和控制。Master 節(jié)點上包含以下組件:
- kube-apiserver:集群控制的入口,提供 HTTP REST 服務(wù)
- kube-controller-manager:Kubernetes 集群中所有資源對象的自動化控制中心
- kube-scheduler:負(fù)責(zé) Pod 的調(diào)度
-
Node:Node 節(jié)點是 Kubernetes 集群中的工作節(jié)點,Node 上的工作負(fù)載由 Master 節(jié)點分配,工作負(fù)載主要是運行容器應(yīng)用。Node 節(jié)點上包含以下組件:
- kubelet:負(fù)責(zé) Pod 的創(chuàng)建、啟動、監(jiān)控、重啟、銷毀等工作,同時與 Master 節(jié)點協(xié)作,實現(xiàn)集群管理的基本功能。
- kube-proxy:實現(xiàn) Kubernetes Service 的通信和負(fù)載均衡
- 運行容器化(Pod)應(yīng)用
-
Pod: Pod 是 Kubernetes 最基本的部署調(diào)度單元。每個 Pod 可以由一個或多個業(yè)務(wù)容器和一個根容器(Pause 容器)組成。一個 Pod 表示某個應(yīng)用的一個實例
- ReplicaSet:是 Pod 副本的抽象,用于解決 Pod 的擴容和伸縮
- Deployment:Deployment 表示部署,在內(nèi)部使用ReplicaSet 來實現(xiàn)。可以通過 Deployment 來生成相應(yīng)的 ReplicaSet 完成 Pod 副本的創(chuàng)建
- Service:Service 是 Kubernetes 最重要的資源對象。Kubernetes 中的 Service 對象可以對應(yīng)微服務(wù)架構(gòu)中的微服務(wù)。Service 定義了服務(wù)的訪問入口,服務(wù)的調(diào)用者通過這個地址訪問 Service 后端的 Pod 副本實例。Service 通過 Label Selector 同后端的 Pod 副本建立關(guān)系,Deployment 保證后端Pod 副本的數(shù)量,也就是保證服務(wù)的伸縮性。
Kubernetes 主要由以下幾個核心組件組成:
- etcd 保存了整個集群的狀態(tài),就是一個數(shù)據(jù)庫;
- apiserver 提供了資源操作的唯一入口,并提供認(rèn)證、授權(quán)、訪問控制、API 注冊和發(fā)現(xiàn)等機制;
- controller manager 負(fù)責(zé)維護(hù)集群的狀態(tài),比如故障檢測、自動擴展、滾動更新等;
- scheduler 負(fù)責(zé)資源的調(diào)度,按照預(yù)定的調(diào)度策略將 Pod 調(diào)度到相應(yīng)的機器上;
- kubelet 負(fù)責(zé)維護(hù)容器的生命周期,同時也負(fù)責(zé) Volume(CSI)和網(wǎng)絡(luò)(CNI)的管理;
- Container runtime 負(fù)責(zé)鏡像管理以及 Pod 和容器的真正運行(CRI);
- kube-proxy 負(fù)責(zé)為 Service 提供 cluster 內(nèi)部的服務(wù)發(fā)現(xiàn)和負(fù)載均衡;
當(dāng)然了除了上面的這些核心組件,還有一些推薦的插件:
- kube-dns 負(fù)責(zé)為整個集群提供 DNS 服務(wù)
- Ingress Controller 為服務(wù)提供外網(wǎng)入口
- Heapster 提供資源監(jiān)控
- Dashboard 提供 GUI
組件通信
Kubernetes 多組件之間的通信原理:
- apiserver 負(fù)責(zé) etcd 存儲的所有操作,且只有 apiserver 才直接操作 etcd 集群
-
apiserver 對內(nèi)(集群中的其他組件)和對外(用戶)提供統(tǒng)一的 REST API,其他組件均通過 apiserver 進(jìn)行通信
- controller manager、scheduler、kube-proxy 和 kubelet 等均通過 apiserver watch API 監(jiān)測資源變化情況,并對資源作相應(yīng)的操作
- 所有需要更新資源狀態(tài)的操作均通過 apiserver 的 REST API 進(jìn)行
-
apiserver 也會直接調(diào)用 kubelet API(如 logs, exec, attach 等),默認(rèn)不校驗 kubelet 證書,但可以通過?
--kubelet-certificate-authority
?開啟(而 GKE 通過 SSH 隧道保護(hù)它們之間的通信)
比如最典型的創(chuàng)建 Pod 的流程:??
- 用戶通過 REST API 創(chuàng)建一個 Pod
- apiserver 將其寫入 etcd
- scheduluer 檢測到未綁定 Node 的 Pod,開始調(diào)度并更新 Pod 的 Node 綁定
- kubelet 檢測到有新的 Pod 調(diào)度過來,通過 container runtime 運行該 Pod
- kubelet 通過 container runtime 取到 Pod 狀態(tài),并更新到 apiserver 中
集群部署
使用kubeadm工具安裝
1. master和node 都用yum 安裝kubelet,kubeadm,docker
2. master 上初始化:kubeadm init
3. master 上啟動一個flannel的pod
4. node上加入集群:kubeadm join
準(zhǔn)備環(huán)境
Centos7? 192.168.50.21 k8s-master
Centos7? 192.168.50.22 k8s-node01
Centos7? 192.168.50.23 k8s-node02
修改主機名(3臺機器都需要修改)
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node01
hostnamectl set-hostname k8s-node02
關(guān)閉防火墻
systemctl stop firewalld.service
配置docker yum源
yum install -y yum-utils device-mapper-persistent-data lvm2 wget
cd /etc/yum.repos.d
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
配置kubernetes yum 源
cd /opt/
wget https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
rpm --import yum-key.gpg
rpm --import rpm-package-key.gpg
cd /etc/yum.repos.d
vi kubernetes.repo
輸入以下內(nèi)容
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
enabled=1
yum repolist
master和node 安裝kubelet,kubeadm,docker
yum install docker
yum install kubelet-1.13.1
yum install kubeadm-1.13.1
master 上安裝kubectl
yum install kubectl-1.13.1
配置私有倉庫和鏡像加速地址,私有倉庫配置參見
Docker學(xué)習(xí)(三)-簡單的私有DockerHub搭建-CSDN博客
vi /etc/docker/daemon.json
{
"registry-mirror":[
"http://hub-mirror.c.163.com"
],
"insecure-registries":[
"192.168.50.24:5000"
]
}
啟動docker
vi /etc/sysconfig/kubelet
systemctl daemon-reload
systemctl start docker
docker info
master 上初始化:kubeadm init?
vi /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
kubeadm init \
--apiserver-advertise-address=192.168.50.21 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.13.1 \
--pod-network-cidr=10.244.0.0/16
初始化命令說明:
--apiserver-advertise-address
指明用 Master 的哪個 interface 與 Cluster 的其他節(jié)點通信。如果 Master 有多個 interface,建議明確指定,如果不指定,kubeadm 會自動選擇有默認(rèn)網(wǎng)關(guān)的 interface。文章來源:http://www.zghlxwxcb.cn/news/detail-825688.html
--pod-network-cidr
指定 Pod 網(wǎng)絡(luò)的范圍。Kubernetes 支持多種網(wǎng)絡(luò)方案,而且不同網(wǎng)絡(luò)方案對 --pod-network-cidr 有自己的要求,這里設(shè)置為 10.244.0.0/16 是因為我們將使用 flannel 網(wǎng)絡(luò)方案&#x文章來源地址http://www.zghlxwxcb.cn/news/detail-825688.html
到了這里,關(guān)于Docker學(xué)習(xí)(五)-Kubernetes 集群搭建 - Spring Boot 應(yīng)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!