Statefulset?控制器:概念卧晓、原理解讀?StatefulSet?是為了管理有狀態(tài)服務(wù)的問(wèn)題而設(shè)計(jì)的
有狀態(tài)服務(wù)?
StatefulSet?是有狀態(tài)的集合虱黄,管理有狀態(tài)的服務(wù)悦即,它所管理的?Pod?的名稱(chēng)不能隨意變化。數(shù)據(jù) 持久化的目錄也是不一樣橱乱,每一個(gè)?Pod?都有自己獨(dú)有的數(shù)據(jù)持久化存儲(chǔ)目錄辜梳。比如?MySQL?主 從、redis?集群等泳叠。
無(wú)狀態(tài)服務(wù)?
RC作瞄、Deployment、DaemonSet?都是管理無(wú)狀態(tài)的服務(wù)危纫,它們所管理的?Pod?的?IP宗挥、名字,啟 停順序等都是隨機(jī)的种蝶。個(gè)體對(duì)整體無(wú)影響属韧,所有?pod?都是共用一個(gè)數(shù)據(jù)卷的,部署的?tomcat?就 是無(wú)狀態(tài)的服務(wù)蛤吓,tomcat?被刪除,在啟動(dòng)一個(gè)新的?tomcat糠赦,加入到集群即可会傲,跟?tomcat?的名 字無(wú)關(guān)。
StatefulSet?由以下幾個(gè)部分組成:
1. Headless Service:用來(lái)定義?pod?網(wǎng)路標(biāo)識(shí)拙泽,生成可解析的?DNS?記錄
2. volumeClaimTemplates:存儲(chǔ)卷申請(qǐng)模板淌山,創(chuàng)建?pvc,指定?pvc?名稱(chēng)大小顾瞻,自動(dòng)創(chuàng)建?pvc泼疑,且?pvc?由存儲(chǔ)類(lèi)供應(yīng)。
3. StatefulSet:管理?pod?的
什么是?Headless service?
Headless service?
不分配?clusterIP荷荤,headless service?可以通過(guò)解析?service?的?DNS,返回所 有?Pod?的?dns?和?ip?地址?(statefulSet?部署的?Pod?才有?DNS)退渗,普通的?service,只能通過(guò)解析?service?的?DNS?返回?service?的?ClusterIP移稳。
為什么要用?headless service(沒(méi)有?service ip?的?service)?
在使用?Deployment?時(shí),創(chuàng)建的?Pod?名稱(chēng)是沒(méi)有順序的会油,是隨機(jī)字符串个粱,在用?statefulset?管理?pod?時(shí)要求?pod?名稱(chēng)必須是有序的 ,每一個(gè)?pod?不能被隨意取代翻翩,pod?重建后?pod?名稱(chēng)還是一樣的都许。因?yàn)?pod IP?是變化的,所以要用?Pod?名稱(chēng)來(lái)識(shí)別嫂冻。pod?名稱(chēng)是?pod?唯一性的標(biāo)識(shí)符胶征,必須持久穩(wěn)定有效。這時(shí)候要用到無(wú)頭服務(wù)桨仿,它可以給每個(gè)?Pod?一個(gè)唯一的名稱(chēng)睛低。
1.headless service?會(huì)為?service?分配一個(gè)域名
<service name>.$<namespace name>.svc.cluster.local
K8s?中資源的全局?FQDN?格式:?
Service_NAME.NameSpace_NAME.Domain.LTD.
Domain.LTD.=svc.cluster.local. ? ?#這是默認(rèn)?k8s?集群的域名。
FQDN?全稱(chēng)?Fully Qualified Domain Name?
即全限定域名:同時(shí)帶有主機(jī)名和域名的名稱(chēng)?FQDN = Hostname + DomainName
如 主機(jī)名是 god
域名是?baidu.com
FQDN= god.baidu.com
2.StatefulSet?會(huì)為關(guān)聯(lián)的?Pod?保持一個(gè)不變的?Pod Name statefulset?中?Pod?的名字格式為$(StatefulSet name)-$(pod?序號(hào))
3.StatefulSet?會(huì)為關(guān)聯(lián)的?Pod?分配一個(gè)?dnsName
$.$.$.svc.cluster.local
為什么要用?volumeClaimTemplate?
對(duì)于有狀態(tài)應(yīng)用都會(huì)用到持久化存儲(chǔ)蹬敲,比如?mysql?主從暇昂,由于主從數(shù)據(jù)庫(kù)的數(shù)據(jù)是不能存放在一 個(gè)目錄下的,每個(gè)?mysql?節(jié)點(diǎn)都需要有自己獨(dú)立的存儲(chǔ)空間伴嗡。而在?deployment?中創(chuàng)建的存儲(chǔ)卷 是一個(gè)共享的存儲(chǔ)卷急波,多個(gè)?pod?使用同一個(gè)存儲(chǔ)卷,它們數(shù)據(jù)是同步的瘪校,而?statefulset?定義中 的每一個(gè)?pod?都不能使用同一個(gè)存儲(chǔ)卷澄暮,這就需要使用?volumeClainTemplate,當(dāng)在使用?statefulset?創(chuàng)建?pod?時(shí)阱扬,volumeClainTemplate?會(huì)自動(dòng)生成一個(gè)?PVC泣懊,從而請(qǐng)求綁定一個(gè)?PV,每一個(gè)?pod?都有自己專(zhuān)用的存儲(chǔ)卷麻惶。Pod馍刮、PVC?和?PV?對(duì)應(yīng)的關(guān)系圖如下:
Statefulset?資源清單文件編寫(xiě)
kubectl explain statefulset.spec
apiVersion <string> ? ?#定義?statefulset?資源需要使用的?api?版本
kind。 ? ? ? ? ? ? ? ? ? ? ? ??#定義的資源類(lèi)型
metadata<Object> ? ??#元數(shù)據(jù)
spec <Object> ? ? ? ? ? ? #定義容器相關(guān)的信息
podManagementPolicy #pod?管理策略
replicas <integer> #副本數(shù)
revisionHistoryLimit <integer> #保留的歷史版本
selector <Object> -required- #標(biāo)簽選擇器窃蹋,選擇它所關(guān)聯(lián)的?pod
serviceName -required- #headless service?的名字
template <Object> -required- #生成?pod?的模板
updateStrategy <Object> #更新策略
volumeClaimTemplates<[]Object> #存儲(chǔ)卷申請(qǐng)模板
#查看?statefulset?的?spec.template?字段如何定義?
#對(duì)于?template?而言卡啰,其內(nèi)部定義的就是?pod,pod?模板是一個(gè)獨(dú)立的對(duì)象
KIND: StatefulSet
VERSION:? apps/v1
RESOURCE: template <Object>
DESCRIPTION:
? ? template is the object that describes the pod that will be created if
? ? insufficient replicas are detected. Each pod stamped out by the StatefulSet
? ? will fulfill this Template, but have a unique identity from the rest of the
? ? StatefulSet.
? ? PodTemplateSpec describes the data a pod should have when created from a
? ? template
statefulset?資源中有兩個(gè)?spec?字段警没。第一個(gè)?spec?聲明的是?statefulset?定 義多少個(gè)?Pod?副本(默認(rèn)將僅部署?1?個(gè)?Pod)匈辱、匹配?Pod?標(biāo)簽的選擇器、創(chuàng)建?pod?的模板杀迹、存 儲(chǔ)卷申請(qǐng)模板亡脸,第二個(gè)?spec?是?spec.template.spec:主要用于?Pod?里的容器屬性等配置。?.spec.template?里的內(nèi)容是聲明?Pod?對(duì)象時(shí)要定義的各種屬性,所以這部分也叫做?PodTemplate(Pod?模板)浅碾。還有一個(gè)值得注意的地方是:在.spec.selector?中定義的標(biāo)簽選擇 器必須能夠匹配到?spec.template.metadata.labels?里定義的?Pod?標(biāo)簽大州,否則?Kubernetes?將 不允許創(chuàng)建?statefulset。
使用Statefulset 部署?web
vim class-web.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
? name: nfs-web
provisioner: example.com/nfs ? ? ? #對(duì)應(yīng)供應(yīng)商的存儲(chǔ)類(lèi)名字及穗。env?下 nfs-deployment.yaml
kubectl apply -f class-web.yaml
kubectl get storageclass
NAME? ? ? PROVISIONER? ? ? RECLAIMPOLICY? VOLUMEBINDINGMODE? ALLOWVOLUMEEXPANSION? AGE
nfs? ? ? example.com/nfs? Delete? ? ? ? ? Immediate? ? ? ? ? false? ? ? ? ? ? ? ? ? 22h
nfs-web? example.com/nfs? Delete? ? ? ? ? Immediate? ? ? ? ? false? ? ? ? ? ? ? ? ? 6m47s
#編寫(xiě)一個(gè)?Statefulset?資源清單文件
cat statefulset.yaml
apiVersion: v1
kind: Service
metadata:
? name: nginx
? labels:
? ? app: nginx
spec:
? ports:
? - port: 80
? ? name: web
? clusterIP: None?#svc里面的字段type: ClusterIP/NodePort摧茴,這個(gè)是指定服務(wù)類(lèi)型的,而clusterIP:None屬于無(wú) ? ? ? ? 頭服務(wù)也是svc的一種
? selector:
? ? app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
? name: web
spec:
? selector:
? ? matchLabels:
? ? ? app: nginx
? serviceName: "nginx"
? replicas: 2
? template:
? ? metadata:
? ? labels:
? ? ? app: nginx
? ? spec:
? ? ? containers:
? ? ? - name: nginx
? ? ? ? image: nginx
? ? ? ? ports:
? ? ? ? - containerPort: 80
? ? ? ? ? name: web
? ? ? ? volumeMounts:
? ? ? ? - name: www
? ? ? ? ? mountPath: /usr/share/nginx/html
? volumeClaimTemplates:
? - metadata:
? ? ? name: www
? ? spec:
? ? ? accessModes: ["ReadWriteOnce"]
? ? ? storageClassName: "nfs-web"
? ? ? resources:
? ? ? ? requests:
? ? ? ? ? storage: 1Gi
kubectl apply -f statefulset.yaml
#查看?statefulset?是否創(chuàng)建成功
# kubectl get statefulset
#查看pod
kubectl get pods -l app=nginx
kubectl get pvc
NAME? ? ? ? ? STATUS? VOLUME? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? CAPACITY? ACCESS MODES? STORAGECLASS? AGE
www-web-0? ? Bound? ? pvc-3dc06339-e3d4-443f-a152-ec8728fe26f2? 1Gi? ? ? ? RWO? ? ? ? ? ? nfs-web? ? ? ? 18m
www-web-1? ? Bound? ? pvc-cc3e704f-09d7-4911-8687-d22ba1f28eba? 1Gi? ? ? ? RWO? ? ? ? ? ? nfs-web? ? ? ? 17m
kubectl get pv
NAME? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? CAPACITY? ACCESS MODES? RECLAIM POLICY? STATUS? ? ? CLAIM? ? ? ? ? ? ? ? STORAGECLASS? REASON? AGE
pvc-3dc06339-e3d4-443f-a152-ec8728fe26f2? 1Gi? ? ? ? RWO? ? ? ? ? ? Delete? ? ? ? ? Bound? ? ? default/www-web-0? ? nfs-web? ? ? ? ? ? ? ? 19m
pvc-cc3e704f-09d7-4911-8687-d22ba1f28eba? 1Gi? ? ? ? RWO? ? ? ? ? ? Delete? ? ? ? ? Bound? ? ? default/www-web-1? ? nfs-web
#如果更新鏡像埂陆,會(huì)自動(dòng)刪除pod苛白,然后更新
kubectl edit sts web ??
#? 查看鏡像更改
kubectl describe pods web-0
#查看?headless service
kubectl get svc -l app=nginx
#查看?pod?主機(jī)名
for i in 0 1; do kubectl exec web-$i -- sh -c 'hostname'; done
#使用?kubectl run?運(yùn)行一個(gè)提供?nslookup?命令的容器的,改命令來(lái)自于?dnsutils?包焚虱,通過(guò)對(duì)?pod?主機(jī)名執(zhí)行?nslookup购裙,可以檢查它們?cè)诩簝?nèi)部的?DNS?地址:
kubectl exec -it web-1 -- /bin/bash
root@web-1:/# apt-get update?
root@web-1:/# apt-get install dnsutils -y
root@web-1:/# nslookup web-0.nginx.default.svc.cluster.local Server: 10.96.0.10
Address: 10.96.0.10#53
Name: web-0.nginx.default.svc.cluster.local
#statefulset?創(chuàng)建的?pod?也是有?dns?記錄的
Address: 10.244.209.154 #解析的是?pod?的?ip?地址
root@web-1:/# nslookup nginx.default.svc.cluster.local Server: 10.96.0.10
Address: 10.96.0.10#53
Name: nginx.default.svc.cluster.local?#查詢(xún)?service dns,會(huì)把對(duì)應(yīng)的?pod ip?解析出來(lái)?Address: 10.244.209.139
Name: nginx.default.svc.cluster.local Address: 10.244.209.140
root@web-1:/# dig -t A nginx.default.svc.cluster.local @10.96.0.10
; <<>> DiG 9.11.5-P4-5.1+deb10u3-Debian <<>> -t A nginx.default.svc.cluster.local @10.96.0.10
;; global options: +cmd
;; Got answer:
;; WARNING: .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27207
;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
dig?的使用
dig -t A nginx.default.svc.cluster.local @10.96.0.10?格式如下:
@來(lái)指定域名服務(wù)器
A?為解析類(lèi)型 鹃栽,A?記錄
-t?指定要解析的類(lèi)型
A?記錄:
A?記錄是解析域名到?IP
資源清單詳細(xì)解讀:
apiVersion: v1躏率。 ? ?#定義?api?版本
kind: Service ? ? ? ??#定義要?jiǎng)?chuàng)建的資源:service
metadata:
? name: nginx ? ? ? ? ?#定義?service?的名字
? labels:
? ? app: nginx ? ? ? ??#service?的標(biāo)簽
spec:
? ports:
? - port: 80
? ? name: web
? clusterIP: None ? ? ??#創(chuàng)建一個(gè)沒(méi)有?ip?的?service
? selector:
? ? app: nginx ? ? ? ? ? ??#選擇擁有?app=nginx?標(biāo)簽的?pod
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
? name: web
spec:
? selector:
? ? matchLabels:
? ? ? app: nginx
? serviceName: "nginx" ? ? ? ??#headless service?的名字
? replicas: 2 ? ? ? ? ? ? ? ? ? ? ?
? template: ? ? ? ? ? ? ? ? ? ? ? ? ? ?#定義?pod?的模板
? ? metadata:
? ? labels:
? ? ? app: nginx
? ? spec:
? ? ? containers:
? ? ? - name: nginx
? ? ? ? image: nginx
? ? ? ? ports:
? ? ? ? - containerPort: 80
? ? ? ? ? name: web
? ? ? ? volumeMounts:
? ? ? ? - name: www
? ? ? ? ? mountPath: /usr/share/nginx/html
? volumeClaimTemplates: ? ? ? ? ? ? ? ? ? ? ??#存儲(chǔ)卷申請(qǐng)模板
? - metadata:
? ? ? name: www
? ? spec:
? ? ? accessModes: ["ReadWriteOnce"]
? ? ? storageClassName: "nfs-web" ? ? ? ? ?#指定從哪個(gè)存儲(chǔ)類(lèi)申請(qǐng)?pv
? ? ? resources:
? ? ? ? requests:
? ? ? ? ? storage: 1Gi ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#需要?1G?的?pvc,會(huì)自動(dòng)跟符合條件的?pv?綁定
?service?和?headless service?區(qū)別:
通過(guò)?deployment?創(chuàng)建?pod民鼓,pod?前端創(chuàng)建一個(gè)?service
cat deploy-service.yaml
apiVersion: v1
kind: Service
metadata:
? name: my-nginx
? labels:
? ? run: my-nginx
spec:
? type: ClusterIP
? selector:
? ? run: my-nginx? #選擇擁有 run=my-nginx 標(biāo)簽的 pod
? ports:
? - targetPort: 80? #pod 容器中定義的端口
? ? protocol: TCP
? ? port: 80? ? ? ? #service 的端口薇芝,暴露給 k8s 集群內(nèi)部服務(wù)訪問(wèn)
---
apiVersion: apps/v1
kind: Deployment
metadata:
? name: my-nginx
spec:
? selector:
? ? matchLabels:
? ? ? run: my-nginx
? replicas: 2
? template:
? ? metadata:
? ? ? name: nginx
? ? ? labels:
? ? ? ? ? run: my-nginx
? ? spec:
? ? ? containers:
? ? ? - name: my-nginx
? ? ? ? image: busybox
? ? ? ? ports:
? ? ? ? - containerPort: 80
? ? ? ? command:
? ? ? ? - sleep
? ? ? ? - "3600"
kubectl apply -f deploy-service.yaml
kubectl get svc -l run=my-nginx
NAME? ? ? TYPE? ? ? ? CLUSTER-IP? ? EXTERNAL-IP? PORT(S)? AGE
my-nginx? ClusterIP? 10.100.89.90? <none>? ? ? ? 80/TCP? ? 53s
kubectl exec -it web-1 -- /bin/bash root@web-1:/# nslookup my-nginx.default.svc.cluster.local Server: 10.96.0.10
Address: 10.96.0.10#53
Name: my-nginx.default.svc.cluster.local
Address: 10.100.89.90 #
解析的是?service?的?ip?地址
#Statefulset?實(shí)現(xiàn)?pod?的動(dòng)態(tài)擴(kuò)容
如果我們覺(jué)得兩個(gè)副本太少了,想要增加丰嘉,只需要修改配置文件?statefulset.yaml?里的?replicas?的值即可夯到,原來(lái)?replicas: 2,現(xiàn)在變成?replicaset: 3饮亏,修改之后耍贾,執(zhí)行如下命令更新:
kubectl apply -f statefulset.yaml
kubectl get sts
#也可以直接編輯控制器實(shí)現(xiàn)擴(kuò)容
kubectl edit sts web
#這個(gè)是我們把請(qǐng)求提交給了?apiserver,實(shí)時(shí)修改
#查看是不是變成5個(gè)了
kubectl get pods -l app=nginx
#Statefulset?實(shí)現(xiàn)?pod?的動(dòng)態(tài)縮容
如果我們覺(jué)得?4?個(gè)?Pod?副本太多了路幸,想要減少荐开,只需要修改配置文件?statefulset.yaml?里的?replicas?的值即可,把?replicaset:4?變成?replicas: 2简肴,修改之后晃听,執(zhí)行如下命令更新:
]# kubectl apply -f statefulset.yaml
#Statefulset?實(shí)現(xiàn)?pod?的更新,更新鏡像
docker load -I myapp.tar.gz ? ? ? ? 上傳到工作節(jié)點(diǎn)
kubectl edit sts web
#修改鏡像?nginx?變成- image: ikubernetes/myapp:v2砰识,修改之后保存退出
kubectl get pods -o wide -l app=nginx
?pod?已經(jīng)使用剛才更新的鏡像?ikubernetes/myapp:v2?了
k8s?配置管理中心?Configmap
什么是?Configmap?
Configmap?是?k8s?中的資源對(duì)象杂伟,用于保存非機(jī)密性的配置的,數(shù)據(jù)可以用?key/value?鍵值對(duì)的 形式保存仍翰,也可通過(guò)文件的形式保存。
Configmap?能解決哪些問(wèn)題??
我們?cè)诓渴鸱?wù)的時(shí)候观话,每個(gè)服務(wù)都有自己的配置文件予借,如果一臺(tái)服務(wù)器上部署多個(gè)服務(wù):nginx、?tomcat、apache?等灵迫,那么這些配置都存在這個(gè)節(jié)點(diǎn)上秦叛,假如一臺(tái)服務(wù)器不能滿足線上高并發(fā)的要 求,需要對(duì)服務(wù)器擴(kuò)容瀑粥,擴(kuò)容之后的服務(wù)器還是需要部署多個(gè)服務(wù):nginx挣跋、tomcat、apache狞换,新 增加的服務(wù)器上還是要管理這些服務(wù)的配置避咆,如果有一個(gè)服務(wù)出現(xiàn)問(wèn)題,需要修改配置文件修噪,每臺(tái)物 理節(jié)點(diǎn)上的配置都需要修改查库,這種方式肯定滿足不了線上大批量的配置變更要求。 所以黄琼,k8s?中引 入了?Configmap?資源對(duì)象樊销,可以當(dāng)成?volume?掛載到?pod?中,實(shí)現(xiàn)統(tǒng)一的配置管理脏款。
1围苫、Configmap?是?k8s?中的資源, 相當(dāng)于配置管理中心撤师,可以有一個(gè)或者多個(gè)?Configmap;?2剂府、Configmap?可以做成?Volume,k8s pod?啟動(dòng)之后丈氓,通過(guò)?volume?形式映射到容器內(nèi)部指定 目錄上
Configmap?應(yīng)用場(chǎng)景
1周循、使用?k8s?部署應(yīng)用,當(dāng)你將應(yīng)用配置寫(xiě)進(jìn)代碼中万俗,更新配置時(shí)也需要打包鏡像湾笛,configmap?可 以將配置信息和?docker?鏡像解耦,以便實(shí)現(xiàn)鏡像的可移植性和可復(fù)用性闰歪,因?yàn)橐粋€(gè)?configMap?其 實(shí)就是一系列配置信息的集合嚎研,可直接注入到?Pod?中給容器使用。configmap?注入方式有兩種库倘,一 種將?configMap?做為存儲(chǔ)卷临扮,一種是將?configMap?通過(guò)?env?中?configMapKeyRef?注入到容器 中。?2教翩、使用微服務(wù)架構(gòu)的話杆勇,存在多個(gè)服務(wù)共用配置的情況,如果每個(gè)服務(wù)中單獨(dú)一份配置的話饱亿,那么 更新配置就很麻煩蚜退,使用?configmap?可以友好的進(jìn)行配置共享闰靴。
2. 局限性
ConfigMap?在設(shè)計(jì)上不是用來(lái)保存大量數(shù)據(jù)的。在?ConfigMap?中保存的數(shù)據(jù)不可超過(guò)?1 MiB钻注。 如果你需要保存超出此尺寸限制的數(shù)據(jù)蚂且,可以考慮掛載存儲(chǔ)卷或者使用獨(dú)立的數(shù)據(jù)庫(kù)或者文件服務(wù)。
#把?configmap?做成?volume幅恋,掛載到?pod
cat mysql-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
? name: mysql
? labels:
? ? app: mysql
data:
? master.conf: |
? ? [mysqld]
? ? log-bin
? ? log_bin_trust_function_creators=1
? ? lower_case_table_names=1
? slave.cnf: |
? ? [mysqld]
? ? super-read-only
? ? log_bin_trust_function_creators=1
kubectl apply -f mysql-configmap.yaml
cat mysql-pod-volume.yaml
apiVersion: v1
kind: Pod
metadata:
? name: mysql-pod-volume
spec:
? containers:
? - name: mysql
? ? image: busybox
? ? command: ["bin/sh","-c","sleep 3600"]
? ? volumeMounts:
? ? - name: mysql-config
? ? ? mountPath: /tmp/config
? volumes:
? - name: mysql-config
? ? configMap:
? ? ? name: mysql
? restartPolicy: Never
kubectl apply -f mysql-pod-volume.yaml
kubectl exec -it mysql-pod-volume -- /bin/sh
/ # cd /tmp/config/
/tmp/config # ls
master.conf? slave.cnf
/tmp/config # vi master.conf
serviceaccount?與?rbac
1杏死、ServiceAccount
kubernetes?中賬戶(hù)區(qū)分為:User Accounts(用戶(hù)賬戶(hù)) 和?Service Accounts(服務(wù)賬戶(hù)) 兩種:
UserAccount?是給?kubernetes?集群外部用戶(hù)使用的,例如運(yùn)維或者集群管理人員捆交,K8s?上的用戶(hù) 賬戶(hù)?useraccount淑翼,kubeadm?安裝的?k8s,默認(rèn)用戶(hù)賬號(hào)是?kubernetes-admin;
k8s?客戶(hù)端(一般用:kubectl) ------>API Server
APIServer?需要對(duì)客戶(hù)端做認(rèn)證零渐,默認(rèn)使用工具安裝的?K8s窒舟,會(huì)在用戶(hù)家目錄下創(chuàng)建一個(gè)認(rèn)證配置 文件?.kube/config?這里面保存了客戶(hù)端訪問(wèn)?API Server?的密鑰相關(guān)信息,這樣當(dāng)用?kubectl?訪問(wèn)?k8s?時(shí)诵盼,它就會(huì)自動(dòng)讀取該配置文件惠豺,向?API Server?發(fā)起認(rèn)證,然后完成操作請(qǐng)求风宁。