Kubernetes食用指南-創(chuàng)新互聯(lián)

Kubernetes食用簡(jiǎn)介

Kubernetes是Google在2014年6月開源的一個(gè)容器集群管理系統(tǒng),使用Go語(yǔ)言開發(fā),Kubernetes也叫K8S。K8S是Google內(nèi)部一個(gè)叫Borg的容器集群管理系統(tǒng)衍生出來(lái)的,Borg已經(jīng)在Google大規(guī)模生產(chǎn)運(yùn)行十年之久。
K8S主要用于自動(dòng)化部署、擴(kuò)展和管理容器應(yīng)用,提供了資源調(diào)度、部署管理、服務(wù)發(fā)現(xiàn)、擴(kuò)容縮容、監(jiān)控等一整套功能;2015年7月,Kubernetes v1.0正式發(fā)布,截止到2018年8月2日最新穩(wěn)定版本是v1.15.1,最新穩(wěn)定版本是v1.16.0-alpha.2,Kubernetes目標(biāo)是讓部署容器化應(yīng)用簡(jiǎn)單高效。

成都創(chuàng)新互聯(lián)長(zhǎng)期為上千多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為青陽(yáng)企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)制作、網(wǎng)站建設(shè),青陽(yáng)網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

官方網(wǎng)站:https://kubernetes.io

Kubernetes主要功效

數(shù)據(jù)卷
Pod中容器之間共享數(shù)據(jù),可以使用數(shù)據(jù)卷;
應(yīng)用程序健康檢
查容器內(nèi)服務(wù)可能進(jìn)程堵塞無(wú)法處理請(qǐng)求,可以設(shè)置監(jiān)控檢查策略保證應(yīng)用健壯性;
復(fù)制應(yīng)用程序?qū)嵗?br />控制器維護(hù)著Pod副本數(shù)量,保證一個(gè)Pod或一組同類的Pod數(shù)量始終可用;
彈性伸縮
根據(jù)設(shè)定的指標(biāo)(CPU利用率)自動(dòng)縮放Pod副本數(shù);
服務(wù)發(fā)現(xiàn)
使用環(huán)境變量或DNS服務(wù)插件保證容器中程序發(fā)現(xiàn)Pod入口訪問(wèn)地址;
負(fù)載均衡
一組Pod副本分配一個(gè)私有的集群IP地址,負(fù)載均衡轉(zhuǎn)發(fā)請(qǐng)求到后端容器,在集群內(nèi)部其他Pod可通過(guò)這個(gè)ClusterIP訪問(wèn)應(yīng)用;
滾動(dòng)更新
更新服務(wù)不中斷,一次更新一個(gè)Pod,而不是同時(shí)刪除整個(gè)服務(wù);
服務(wù)編排
通過(guò)文件描述部署服務(wù),使得應(yīng)用程序部署變得更高效;
資源監(jiān)控
Node節(jié)點(diǎn)組件集成cAdvisor資源收集工具,可通過(guò)Heapster匯總整個(gè)集群節(jié)點(diǎn)資源數(shù)據(jù),然后存儲(chǔ)到InfluxDB時(shí)序數(shù)據(jù)庫(kù),再由Grafana展示;
提供認(rèn)證和授權(quán)
支持屬性訪問(wèn)控制(ABAC)、角色訪問(wèn)控制(RBAC)認(rèn)證授權(quán)策略;

Kubernetes基本對(duì)象概念

PodPod
是最小部署單元,一個(gè)Pod有一個(gè)或多個(gè)容器組成,Pod中容器共享存儲(chǔ)和網(wǎng)絡(luò),在同一臺(tái)Docker主機(jī)上運(yùn)行;
Service
Service一個(gè)應(yīng)用服務(wù)抽象,定義了Pod邏輯集合和訪問(wèn)這個(gè)Pod集合的策略,Service代理Pod集合對(duì)外表現(xiàn)是為一個(gè)訪問(wèn)入口,分配一個(gè)集群IP地址,來(lái)自這個(gè)IP的請(qǐng)求將負(fù)載均衡轉(zhuǎn)發(fā)后端Pod中的容器,Service通過(guò)Lable Selector選擇一組Pod提供服務(wù);
Volume
數(shù)據(jù)卷,共享Pod中容器使用的數(shù)據(jù);
Namespace
命名空間將對(duì)象邏輯上分配到不同Namespace,可以是不同的項(xiàng)目、用戶等區(qū)分管理,并設(shè)定控制策略,從而實(shí)現(xiàn)多租戶;命名空間也稱為虛擬集群;
Lable
標(biāo)簽用于區(qū)分對(duì)象(比如Pod、Service),鍵/值對(duì)存在,每個(gè)對(duì)象可以有多個(gè)標(biāo)簽,通過(guò)標(biāo)簽關(guān)聯(lián)對(duì)象;
ReplicaSet
下一代Replication Controller;確保任何給定時(shí)間指定的Pod副本數(shù)量,并提供聲明式更新等功能;RC與RS唯一區(qū)別就是lable selector支持不同,RS支持新的基于集合的標(biāo)簽,RC僅支持基于等式的標(biāo)簽;
Deployment
Deployment是一個(gè)更高層次的API對(duì)象,它管理ReplicaSets和Pod,并提供聲明式更新等功能,官方建議使用Deployment管理ReplicaSets,而不是直接使用ReplicaSets,這就意味著可能永遠(yuǎn)不需要直接操作ReplicaSet對(duì)象;
Stateful
SetStatefulSet適合持久性的應(yīng)用程序,有唯一的網(wǎng)絡(luò)標(biāo)識(shí)符(IP),持久存儲(chǔ),有序的部署、擴(kuò)展、刪除和滾動(dòng)更新;
DaemonSet
DaemonSet確保所有(或一些)節(jié)點(diǎn)運(yùn)行同一個(gè)Pod;當(dāng)節(jié)點(diǎn)加入Kubernetes集群中,Pod會(huì)被調(diào)度到該節(jié)點(diǎn)上運(yùn)行,當(dāng)節(jié)點(diǎn)從集群中移除時(shí),DaemonSet的Pod會(huì)被刪除;刪除DaemonSet會(huì)清理它所有創(chuàng)建的Pod;
Job
一次性任務(wù),運(yùn)行完成后Pod銷毀,不再重新啟動(dòng)新容器,還可以任務(wù)定時(shí)運(yùn)行;

Kubernetes食用指南

Kubernetes成分

Master組件:

kube-apiserver
Kubernetes API,集群的統(tǒng)一入口,各組件協(xié)調(diào)者,以HTTP API提供接口服務(wù),所有對(duì)象資源的增刪改查和監(jiān)聽操作都交給APIServer處理后再提交給Etcd存儲(chǔ);

kube-controller-manager
處理集群中常規(guī)后臺(tái)任務(wù),一個(gè)資源對(duì)應(yīng)一個(gè)控制器,而ControllerManager就是負(fù)責(zé)管理這些控制器的;

kube-scheduler
根據(jù)調(diào)度算法為新創(chuàng)建的Pod選擇一個(gè)Node節(jié)點(diǎn);

Node組件:

kubelet
kubelet是Master在Node節(jié)點(diǎn)上的Agent,管理本機(jī)運(yùn)行容器的生命周期,比如創(chuàng)建容器、Pod掛載數(shù)據(jù)卷、下載secret、獲取容器和節(jié)點(diǎn)狀態(tài)等工作,kubelet將每個(gè)Pod轉(zhuǎn)換成一組容器;

kube-proxy
在Node節(jié)點(diǎn)上實(shí)現(xiàn)Pod網(wǎng)絡(luò)代理,維護(hù)網(wǎng)絡(luò)規(guī)則和四層負(fù)載均衡工作;

docker或rocket/rkt
運(yùn)行容器;

第三方服務(wù):

etcd
分布式鍵值存儲(chǔ)系統(tǒng);用于保持集群狀態(tài),比如Pod、Service等對(duì)象信息;

非必要組件:

kube-dns
負(fù)責(zé)為整個(gè)集群提供DNS服務(wù)

Ingress Controller
為服務(wù)提供外網(wǎng)入口

Heapster
提供資源監(jiān)控

Dashboard
提供GUI

Federation
提供跨可用區(qū)的集群

Fluentd-elasticsearch
提供集群日志采集、存儲(chǔ)與查詢

Kubernetes食用指南

Kubernetes食用配方

角色IP組件
master192.168.0.201etcd
kube-apiserver
kube-controller-manager
kube-scheduler
node01192.168.0.202kubelet
kube-proxy
docker
node02192.168.0.203kubelet
kube-proxy
docker
Pod 網(wǎng)絡(luò)10.244.0.0/16
Service 網(wǎng)絡(luò)10.96.0.0/12
  1. 獲取 yum 源

  2. 安裝 Docker、Kubelet、Kubeadm、Kubectl 到所有節(jié)點(diǎn)上

  3. Master節(jié)點(diǎn)初始化

  4. Flannel安裝

  5. 節(jié)點(diǎn)加入

獲取 yum 源
#進(jìn)入?yum?的?repo?目錄cd?/etc/yum.repos.d/#獲取?Docker?的?yum?源wget?https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#編寫?Kubernetes?的?yum?源vim?/etc/yum.repos.d/kubernetes.repo
[Kubernetes]
name=Kubernetes?Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
enabled=1#檢測(cè)?yum?源的可用性yum?repolist
安裝 Docker、Kubelet、Kubeadm、Kubectl 到所有節(jié)點(diǎn)上
#yum?安裝所需部件yum?-y?install?docker-ce?kubelet?kubeadm?kubectl#啟動(dòng)?Docker?服務(wù)systemctl?start?docker#設(shè)置開機(jī)自啟systemctl?enable?docker
systemctl?enable?kubelet

在啟動(dòng) Docker 前,由于某種不可抗力和不可描述的原因,建議國(guó)內(nèi)的程序猿修改HttpsProxy的參數(shù),具體如下:

vim?/usr/lib/systemd/system/docker.service?
Environment="HTTPS_PROXY=http://www.ik8s.io:10080"Environment="NO_PROXY=127.0.0.0/8,192.168.0.0/24"systemctl?daemon-reload
systemctl?restart?docker
docker?info

Kubernetes食用指南

#檢查bridge-nfcat?/proc/sys/net/bridge/bridge-nf-call-ip6tables1cat?/proc/sys/net/bridge/bridge-nf-call-iptables1
Master節(jié)點(diǎn)初始化
#配置kubelet文件,使其忽略?Swap?的報(bào)錯(cuò)vim?/etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"kubeadm?init?--pod-network-cidr=10.244.0.0/16?--service-cidr=10.96.0.0/12?--ignore-preflight-errors=Swap

Kubernetes食用指南

#根據(jù)初始化完成后所給的提示進(jìn)行設(shè)置(建議創(chuàng)建普通用戶進(jìn)行操作)mkdir?-p?$HOME/.kube
sudo?cp?-i?/etc/kubernetes/admin.conf?$HOME/.kube/config
sudo?chown?$(id?-u):$(id?-g)?$HOME/.kube/config#查看集群健康狀態(tài)kubectl?get?cs
NAME?????????????????STATUS????MESSAGE?????????????ERROR
scheduler????????????Healthy???ok??????????????????
controller-manager???Healthy???ok??????????????????
etcd-0???????????????Healthy???{"health":"true"}#查看集群節(jié)點(diǎn)信息kubectl?get?node
NAME??????????????????STATUS?????ROLES????AGE?????VERSION
centos701.0x50j.com???NotReady???master???9m52s???v1.15.2
#查看?docker?容器docker?ps

Kubernetes食用指南

#查看?docker?鏡像docker?images

Kubernetes食用指南

節(jié)點(diǎn)狀態(tài)之所以顯示 NoReady 是應(yīng)為還沒(méi)有安裝flannel

Flannel安裝
#自動(dòng)拉取鏡像啟動(dòng)kubectl?apply?-f?https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml#查看?Pods?網(wǎng)絡(luò)信息kubectl?get?pods?-n?kube-system?-o?wide#查看節(jié)點(diǎn)狀態(tài)是否為?Ready?狀態(tài)kubectl?get?node
NAME??????????????????STATUS???ROLES????AGE???VERSION
centos701.0x50j.com???Ready????master???27m???v1.15.2
節(jié)點(diǎn)加入集群
#加入集群kubeadm?join?[MastertIP地址]:6443?--token?[token值]?--discovery-token-ca-cert-hash?[證書哈希值]?--ignore-preflight-errors=Swap#主節(jié)點(diǎn)上獲取節(jié)點(diǎn)信息kubectl?get?node
NAME??????????????????STATUS???ROLES????AGE???VERSION
centos701.0x50j.com???Ready????master???15h???v1.15.2centos702.0x50j.com???Ready????<none>???15h???v1.15.2centos703.0x50j.com???Ready????<none>???15h???v1.15.2

token值和證書哈希值在初始化集群的時(shí)候有提供

Dashboard可視化插件
#下載yaml文件到本地wget?https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml#修改yaml文件,使其外網(wǎng)能訪問(wèn)vim?kubernetes-dashboard.yaml
......
---#?-------------------?Dashboard?Service?-------------------?#kind:?Service
apiVersion:?v1
metadata:
??labels:
????k8s-app:?kubernetes-dashboard
??name:?kubernetes-dashboard
??namespace:?kube-system
spec:
??type:?NodePort???????#增加type:?NodePort
??ports:
????-?port:?443
??????targetPort:?8443
??????nodePort:?31620??#增加nodePort:?31620
??selector:
????k8s-app:?kubernetes-dashboard#修改配置從阿里云倉(cāng)庫(kù)拉取鏡像vim?kubernetes-dashboard.yaml
......
?containers:
??-?name:?kubernetes-dashboard
????#image:?k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
????image:?registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1
????ports:
......#執(zhí)行部署dashboard服務(wù)kubectl?create?-f?kubernetes-dashboard.yaml

查看Pod的狀態(tài)為running說(shuō)明dashboard已經(jīng)部署成功
kubectl get pod --namespace=kube-system -o wide | grep dashboard

Dashboard 會(huì)在 kube-system namespace 中創(chuàng)建自己的 Deployment 和 Service
kubectl get deployment kubernetes-dashboard --namespace=kube-system
kubectl get service kubernetes-dashboard --namespace=kube-system

Kubernetes食用指南

訪問(wèn)?https://[host_ip]:31620/#!/login
Kubernetes食用指南

#創(chuàng)建dashboard-adminuser.yaml,獲取?Tokenvim?dashboard-adminuser.yaml
apiVersion:?v1
kind:?ServiceAccount
metadata:
??name:?admin-user
??namespace:?kube-system---
apiVersion:?rbac.authorization.k8s.io/v1
kind:?ClusterRoleBinding
metadata:
??name:?admin-user
roleRef:
??apiGroup:?rbac.authorization.k8s.io
??kind:?ClusterRole
??name:?cluster-admin
subjects:
-?kind:?ServiceAccount
??name:?admin-user
??namespace:?kube-system#執(zhí)行yaml文件kubectl?create?-f?dashboard-adminuser.yaml#查看admin-user賬戶的tokenkubectl?-n?kube-system?describe?secret?$(kubectl?-n?kube-system?get?secret?|?grep?admin-user?|?awk?'{print?$1}')

Kubernetes食用指南

使用獲取到的 Token 值登陸 Dashboard 面板
Kubernetes食用指南

Kubernetes食用指南

Kubernetes食用方式

#查詢節(jié)點(diǎn)信息kubectl?describe?node?[節(jié)點(diǎn)名稱]#查看集群信息kubectl?cluster-info#查看創(chuàng)建了的?Podskubectl?get?pods?-o?wide#查看創(chuàng)建了的?Serviceskubectl?get?services?-o?wide#查看?Pod?的網(wǎng)絡(luò)信息kubectl?describe?pods?[Pod名稱]#查看?Pod?的網(wǎng)絡(luò)信息kubectl?describe?service?[Pod名稱]
#運(yùn)行Podkubectl?run?NAME?--image=image?[--env="key=value"]?[--port=port]?[--replicas=replicas]?[--dry-run=bool]?[--overrides=inline-json]?[--command]?--?[COMMAND]?[args...]?[options]#栗子:運(yùn)行?Nginx
kubectl?run?nginx?--image=nginx:1.14?--port=80?--replicas=1運(yùn)行?Busybox
kubectl?run?client?--image=busybox?--replicas=1?-it?--restart=Never

--image 指定所需食用的鏡像
--port 指定暴露的端口
--replicas 指定創(chuàng)建的個(gè)數(shù)

#刪除?Podkubectl?delete?([-f?FILENAME]?|?[-k?DIRECTORY]?|?TYPE?[(NAME?|?-l?label?|?--all)])#栗子:kubectl?delete?pods?nginx-7c45b84548-7bnr6

TYPE 指定刪除的是什么類型,如 services,pods
NAME 指定名稱
-l 指定標(biāo)簽

#創(chuàng)建?servicekubectl?expose?(-f?FILENAME?|?TYPE?NAME)?[--port=port]?[--protocol=TCP|UDP|SCTP]?[--target-port=number-or-name]?[--name=name]?[--external-ip=external-ip-of-service]?[--type=type]?[options]#栗子:kubectl?expose?deployment?nginx?--name=nginx-service?--port=8081?--target-port=80?--protocol=TCP

deployment 指定 deployment pod 的名稱
--name services的名稱
--port 對(duì)外的端口
--target-port 對(duì)內(nèi)的端口(pod 暴露的端口)
--protocol 指定協(xié)議

#擴(kuò)展/縮減?pod的數(shù)量kubectl?scale?[--resource-version=version]?[--current-replicas=count]?--replicas=COUNT?(-f?FILENAME?|?TYPE?NAME)#栗子:kubectl?scale?--replicas=0?deployment?myapp

--replicas 指定數(shù)量

#滾動(dòng)升級(jí)kubectl?set?image?(-f?FILENAME?|?TYPE?NAME)?CONTAINER_NAME_1=CONTAINER_IMAGE_1#栗子:kubectl?set?image?deployment?nginx-web?nginx-web=nginx:1.10#回滾到上一版本kubectl?rollout?undo?deployment?[Pod名稱]#查看狀態(tài)kubectl?rollout?status?deployment?nginx-web

CONTAINER_NAME_1 pod的名稱
CONTAINER_IMAGE_1 升級(jí)到那個(gè)鏡像

#添加標(biāo)簽kubectl?label?[--overwrite]?(-f?FILENAME?|?TYPE?NAME)?KEY_1=VAL_1?...?KEY_N=VAL_N?[--resource-version=version]#栗子:kubectl?label?pods?test-pod?release=canary

TYPE 指定類型,如:svc,pods
NAME 指定名稱
KEY 指定鍵值
VAL 指定標(biāo)簽值

get信息時(shí)可以添加--show-labels查看標(biāo)簽

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

文章名稱:Kubernetes食用指南-創(chuàng)新互聯(lián)
標(biāo)題路徑:http://muchs.cn/article46/cedieg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、動(dòng)態(tài)網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)外貿(mào)網(wǎng)站建設(shè)、虛擬主機(jī)網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司