这章节将要来学习 kubectl 执行的设定档
理解每个设定的组成
还有细部内容
设定档的格式是采用 yaml的格式
这种格式对於缩排要求很严格
因此要很注意每个元素所在的阶层位置
可以使用 yaml-validator 做检查避免错误
本文以 nginx-deployment.yaml 这个档案来解说
内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.16
ports:
- containerPort: 80
apiVersion: apps/v1
kind: Deployment
这部份指定使用的 k8s api 版本
还有发布的类型 以 nginx-deployment.yaml 来说
就是 Deployment
所有关於 kind 跟 apiVersion 的部份都可以透过 k8s api 官方文件去查询
目前连结是采用 1.22 的版本
metadata:
name: nginx-deployment
labels:
app: nginx
这部份是关於这个发布元件的标记内容
举例来说: 这个元件的名称, 还有用来查询的标记
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.16
ports:
- containerPort: 80
这部份是用来指定要如何运行运行这个元件
也可以说是目标状态
举例来说: nginx-deployment.yaml 内
spec 指定要有一个 replicaSet
要采用 nginx: 1.16 作为 image
要注意的是, spec 的属性会随这 kind 不同而变
这部份由 k8s 自动产生
主要会分为目标状态跟实际状态
目标状态是由 spec 指定的状态来产生
实际运行时, k8s 会比较实际状态与目标状态的不同来做调整
而这个实际状态就是存在 etcd 的状态
整个 k8s 的运行状态都会存在 etcd
一般来说, 会与要发布的程序放在同一个资料夹
这样会比较方便管理
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.16
ports:
- containerPort: 80
在 spec 内有一个特别的属性 template
可以发现 template 有自己的 metadata 跟 spec
这边的 template 是一个 Pod 的蓝图
符合前面所说的 Deploymenet 管理 ReplicaSet
ReplicaSet 管理 Pod
在 k8s 设定档里, label 就是用来标记元件
透过这些标记, 可以用来识别不同元件与建立连结
在 k8s 设定档理, selector 可以用来根据 label 选择要配对的元件
举例来说:
在以下范例的 nginx-deployment.yaml 跟 nginx-service.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.16
ports:
- containerPort: 8080
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 8080
nginx-service 透过 selector 对应到 metadata 是 app: nginx 的 Pod
验证如下:
上图说明 nginx-service 的 endpoints 是在 172.17.0.4:80880
IP 的部份是 172.17.0.4
而查询 Pod 布署的 IP 也是 172.17.0.4
因此有成功的把 service 接到 pod 的上面
透过以下指令可以把当下 deployment 状态转出来成一个档案
kubectl get deployment $deployemnt_name -o yaml > $outputfile_name
而这个转换出来的档案除了原本之前所讲的设定档内容外
还会有许多由 k8s 产生出来的设定
比如状态等等
举例来说: 透过以下指令
kubectl get deployment nginx-deployment -o yaml > nginx-deployment-result.yaml
产生出来的档案如下
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "2"
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"labels":{"app":"nginx"},"name":"nginx-deployment","namespace":"default"},"spec":{"replicas":1,"selector":{"matchLabels":{"app":"nginx"}},"template":{"metadata":{"labels":{"app":"nginx"}},"spec":{"containers":[{"image":"nginx:1.16","name":"nginx","ports":[{"containerPort":8080}]}]}}}}
creationTimestamp: "2021-09-11T17:00:33Z"
generation: 4
labels:
app: nginx
name: nginx-deployment
namespace: default
resourceVersion: "109348"
uid: 6a79a2f9-d8f3-43dc-b919-793839d4bf00
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: nginx
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: nginx
spec:
containers:
- image: nginx:1.16
imagePullPolicy: IfNotPresent
name: nginx
ports:
- containerPort: 8080
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
status:
availableReplicas: 1
conditions:
- lastTransitionTime: "2021-09-11T17:01:42Z"
lastUpdateTime: "2021-09-11T17:01:42Z"
message: Deployment has minimum availability.
reason: MinimumReplicasAvailable
status: "True"
type: Available
- lastTransitionTime: "2021-09-11T17:00:34Z"
lastUpdateTime: "2021-09-13T09:46:42Z"
message: ReplicaSet "nginx-deployment-f4b7bbcbc" has successfully progressed.
reason: NewReplicaSetAvailable
status: "True"
type: Progressing
observedGeneration: 4
readyReplicas: 1
replicas: 1
updatedReplicas: 1
这样的档案如果要用来做 apply, 必须要删除 k8s 自动产生的部份
否则会报错
<<: Android Studio初学笔记-Day6-EditText
>>: 从零开始的8-bit迷宫探险【Level 13】主角总是孤独的
在开发 ios app 时,很常发现使用键盘跳出会盖住你的 UITextField 或 UIText...
Day8 go 的变数有着各式各样的型态: int float string pointer ......
Resources 在 OpenTelemetry 中,服务由资源描述,资源是在应用程序启动期间初始...
第一次认识 React Native 就是因为热更新 所以怎麽可以不介绍大家一下呢~ AppCen...
上一篇我们的基因体时代-AI, Data和生物资讯 Day22- 基因注释资料在Bioconduct...