文章目录
资源清单是类似ansibale的playbook,将需要的操作提前写在清单内,然后直接去执行清单,不需要再去逐行输入执行命令。
格式
命令方式是,名称+后缀,后缀是 .yml 或 .yaml。
资源清单定义格式可以查看帮助文档了解
[kubeadm@server5 ~]$ kubectl explain pod
格式写法
apiVersion: #指明api资源属于哪个群组和版本,同一个组可以有多个版本,$ kubectl api-versions可以查询当前的版本,一般都使用v1
kind: #标记创建的资源类型,k8s主要支持以下资源类别
#类型Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Cronjob
Pod
metadata: #元数据
name: #对像名称
namespace: #对象属于哪个命名空间,不写默认是default
labels: #指定资源标签,标签是一种键值数据
spec: #定义目标资源的期望状态
例:
使用资源清单开启一个nginx容器
[kubeadm@server5 ~]$ cat pod.yml
apiVersion: v1
kind:
Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx
写完可以直接其执行文件
[kubeadm@server5 ~]$ kubectl apply -f pod.yml #执行资源清单文件
pod/nginx created
[kubeadm@server5 ~]$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx 1/1 Running 0 15s 10.244.1.16 server6 <none> <none>
[kubeadm@server5 ~]$ curl 10.244.1.16 #可以在集群内部访问到
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
清单可以同时开启多个内容如pod,service,dploment等等,删除时也可以一次全删
[kubeadm@server5 ~]$ kubectl delete -f pod.yml
pod "nginx" deleted
这样的清单属于自主式清单,没有控制器去管理,无法实现更新拉伸等操作。
接着我们来创建带有deploment控制器的清单
[kubeadm@server5 ~]$ cat pod2.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-example
spec:
replicas: 3 #pod数量创建3个
selector:
matchLabels: #管理的标签
app: nginx
template: #定义模板
metadata:
labels: #标签
app: nginx
spec: #定义pod状态
containers:
- name: nginx
image: nginx:latest
可以查看到开启了3个pod,并且可以查看它的标签我们定义的app
[kubeadm@server5 ~]$ kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
deployment-example-674ff86d-nv7tm 1/1 Running 0 5m28s app=nginx,pod-template-hash=674ff86d
deployment-example-674ff86d-vs695 1/1 Running 0 5m28s app=nginx,pod-template-hash=674ff86d
deployment-example-674ff86d-z4vzv 1/1 Running 0 5m28s app=nginx,pod-template-hash=674ff86d
并且我们可以直接去更改yml文件进行镜像更新和pod拉伸等操作
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-example
spec:
replicas: 6
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.16.0
然后直接执行去查看更改
[kubeadm@server5 ~]$ kubectl apply -f pod2.yml
deployment.apps/deployment-example configured
[kubeadm@server5 ~]$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
deployment-example-578d78b6cc-6cvn2 1/1 Running 0 24s 10.244.1.20 server6 <none> <none>
deployment-example-578d78b6cc-cdtg2 1/1 Running 0 20s 10.244.1.22 server6 <none> <none>
deployment-example-578d78b6cc-dhxxf 1/1 Running 0 24s 10.244.1.19 server6 <none> <none>
deployment-example-578d78b6cc-f9g8r 1/1 Running 0 20s 10.244.2.23 server7 <none> <none>
deployment-example-578d78b6cc-nr77w 1/1 Running 0 20s 10.244.2.24 server7 <none> <none>
deployment-example-578d78b6cc-wbjvl 1/1 Running 0 24s 10.244.1.21 server6 <none> <none>