YAML配置文件
YAML是一种简洁的非标记语言.
语法格式:
- 缩进表示层级关系
- 不支持制表符"tab"缩进,使用空格缩进
- 通常开头缩进两个空格
- 每个冒号后面一定要有空格
- 想要表示列表项,使用"-"加一个空格,多个项使用同样的缩进级别作为同一个列表的一部分
- 字符后缩进1空格,如冒号、逗号等
- "—"表示YAML格式,一个文件的开始
- "#"注释
文件解析
# 控制器定义
apiVersion:apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: default
spec:
replicas: 3
matchLabels:
app: nginx
# 被控制对象(通过标签匹配上面的控制器)
template:
metadata:
labels:
app:nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
文件生成
- 用run命令生成
kubectl create deployment nginx --image=nginx:v1.18 -o yaml --dry-run > nginx-deployment.yaml
kubectl expose deloyment nginx --port-80 --target=80 --name=nginx-service --type=NodePort -o yaml --dry-run > nginx-service.yaml
- 用get命令查看或者导出以有项目配置参数
kubectl get deployment/nginx -o yaml
kubectl get deployment/nginx -o yaml --export > nginx.yaml
- Pod容器的字段拼写忘记了
kubectl explain pods.spec.containers
示例
编辑deploy.yaml
vim nginx-depolyment.yaml
apiVersion: apps/v1 #当前格式的版本
kind: Deployment #当前创建资源的类型, 当前类型是Deployment
metadata: #当前资源的元数据
name: nginx-deployment #当前资源的名字 是元数据必须的项
namespace: web
labels:
web: nginx
spec: #是当前Deployment的规格说明
replicas: 3 #指当前创建的副本数量 默认不填 默认值就为‘1’
selector:
matchLabels:
app: nginx
template: #定义pod的模板
metadata: #当前pod的元数据
labels: #至少顶一个labels标签,可任意创建一个 key:value
app: nginx
spec: #当前pod的规格说明
containers: #容器
- name: nginx #是容器的名字容器名字是必须填写的
image: nginx:1.16 #镜像 镜像的名字和版本
ports:
- containerPort: 80
编辑service.yaml
vim nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
namespace: web
labels:
web: nginx
spec:
selector:
app: nginx
ports:
- port: 88
targetPort: 80
nodePort: 30008
type: NodePort
注意: 这里的spec下的selector要和deployment.yaml中的对应上,nodePort端口要在aipserver配置文件里设置的端口范围之内
部署
## 部署
kubectl create -f nginx-depolyment.yaml
kubectl create -f nginx-service.yaml
## 查看部署信息
get all -n web
NAME READY STATUS RESTARTS AGE
pod/nginx-deployment-767cbb69b8-482j2 1/1 Running 0 3m35s
pod/nginx-deployment-767cbb69b8-8prkz 1/1 Running 0 3m35s
pod/nginx-deployment-767cbb69b8-mrbsj 1/1 Running 0 3m35s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx-deployment 3/3 3 3 3m35s
NAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-deployment-767cbb69b8 3 3 3 3m35s
## 通过标签查看deploy
kubectl get deploy -n web -l web=nginx
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 3 11m
## 查看服务发布情况
kubectl get svc -n web -l web=nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-service NodePort 10.0.0.116 <none> 88:30627/TCP 29s
kubectl describe svc -n web -l web=nginx
Name: nginx-service
Namespace: web
Labels: web=nginx
Annotations: <none>
Selector: app=nginx
Type: ClusterIP
IP: 10.0.0.116
Port: <unset> 88/TCP
TargetPort: 80/TCP
Endpoints: 10.244.1.12:80,10.244.2.21:80,10.244.2.22:80
Session Affinity: None
Events: <none>
## 访问测试
curl http://10.0.0.116:88
## 更新版本,将配置文件里的nginx:1.16修改为nginx:latest
kubectl replace -f nginx-depolyment.yaml