Kubernetes 支持 YAML 和 JSON格式 管理资源对象
- JSON 格式:主要用于 api 接口之间消息的传递
- YAML 格式:用于配置和管理,YAML是一种简洁的非标记性语言,内容格式人性化,较易读。
YAML 语法格式
- 大小写敏感;
- 使用缩进表示层级关系;不支持Tab键制表符缩进,只使用空格缩进;
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可,通常开头缩进两个空格;
- 字符后缩进一个空格,如冒号,逗号,短横杆(-) 等
-
---
表示YAML格式,一个文件的开始,用于分隔文件; 可以将创建多个资源写在同一个 yaml 文件中,用---
隔开,就不用写多个 yaml 文件了。 -
#
表示注释;
YAML 文件的学习方法
- 多看别人(官方)写的,能读懂
- 能照着现场的文件改着用
- 遇到不懂的,善用
kubectl explain ...
命令查.
apiVersions
kubectl api-versions
admissionregistration.k8s.io/v1
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1beta1
coordination.k8s.io/v1
coordination.k8s.io/v1beta1
discovery.k8s.io/v1beta1
events.k8s.io/v1beta1
extensions/v1beta1
networking.k8s.io/v1
networking.k8s.io/v1beta1
node.k8s.io/v1beta1
policy/v1beta1
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1
scheduling.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1
如果是业务场景一半首选使用 apps/v1
带有 beta 字样的代表是测试版本,不用在生产环境中。
写一个 yaml 文件,通过声明式创建 pod
使用 -o yaml
导出一个模版来使用:
kubectl get deployments nginx-test1 -o yaml > /opt/nginx-demo1.yaml
apiVersion: apps/v1 # 指定 api 版本标签
# 定义资源的类型/角色, deployment 为副本控制器。
# 此处资源类型可以是: Deployment, Job, Ingress, Service 等
kind: Deployment
# metadata 定义资源的元数据信息, 比如资源的名称/ namespace/ 标签信息等。
metadata:
name: nginx-demo1 # 定义资源的名称,在同一个 namespace 中必须是唯一的。
labels: # 定义资源的标签(Pod 的标签)
app: nginx
# spec 定义 deployment 资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性。
spec:
replicas: 3 # 定义副本数量
selector: # 定义标签选择器
matchLabels: # 定义匹配标签
app: nginx # 匹配的标签
template: # 定义业务模版, 如果有多个副本, 所有副本的属性回按照模版的相关性质进行匹配
metadata:
labels:
app: nginx
spec:
containers: # 定义容器属性
- image: nginx:1.14 # 定义一个容器明,一个 '- name: ' 定义一个容器
name: nginx # 定义容器使用的镜像以及版本
imagePullPolicy: IfNotPresent # 镜像拉去策略
ports:
- containerPort: 80 # 定义容器的对外的端口
protocol: TCP
resources: {}
terminationMessagePath: /tmp/termination-log
应用
kubectl apply -f nginx-demo1.yaml
kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-demo1-8548f7fc4-b9dnp 1/1 Running 0 14m
nginx-demo1-8548f7fc4-lhwg2 1/1 Running 0 13s
创建 Service 资源
### --dry-run 表示测试资源,不是真正的创建。
$ kubectl expose deployment nginx-demo1 --port=80 --target-port=80 --type=NodePort --dry-run
W0430 20:55:44.856261 15813 helpers.go:598] --dry-run is deprecated and can be replaced with --dry-run=client.
service/nginx-demo1 exposed (dry run)
$ kubectl expose deployment nginx-demo1 --port=80 --target-port=80 --type=NodePort --dry-run=client
$ kubectl expose deployment nginx-demo1 --port=80 --target-port=80 --type=NodePort --dry-run=client -o yaml > nginx-demo1.svc.yaml
$ kubectl apply -f nginx-demo1.svc.yaml
service/nginx-demo1 created
$ kubectl get pods,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-demo1-8548f7fc4-b9dnp 1/1 Running 0 20m
pod/nginx-demo1-8548f7fc4-lhwg2 1/1 Running 0 6m12s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 10d
service/nginx-demo1 NodePort 10.1.9.58 <none> 80:32427/TCP 65s
$ curl http://centos702:32427
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
app: nginx
name: nginx-demo1
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: NodePort
status:
loadBalancer: {}
参考(照抄)
If you like TeXt, don’t forget to give me a star.