kubernetes快速入门-资源清单及初识pod资源

k8s资源清单及初识pod资源

k8s资源对象

工作负载型资源(workload):Pod, ReplicaSet, Deployment, StatefulSet, DaemonSet, Job, Cronjob,...

服务发现及负载均衡资源: Service, Ingress, ...

配置与存储相关资源: 存储卷(Volume),CSI(容器存储接口);ConfigMap,Secret, DownwardAPI

集群级资源:NameSpace, Node, Role, ClusterRole, RoleBinding, ClusterRoleBinding

元数据型资源: HPA, PodTemplate, LimitRange

Pod资源配置格式

创建资源时apiserver仅接收JSON格式的资源定义,kubectl run这种方式运行一个资源,这种方式kubectl会自动把各个参数转换为JSON格式,而在对k8s资源进行管理时直接使用JSON格式的数据不太让人容易维护和理解,所以使用yaml格式的方式来编写,yaml能无损的转换为JSON格式。

要想获取一个已有资源的yaml格式文件,只需要在获取资源信息时加上-o yaml选项即可,如

# 获取一个pod资源的yaml格式的信息
k8s@node01:~$ kubectl get pod myapp-dep-c988cf69-2dps2 -o yaml

# 获取一个node资源的yaml格式的信息
k8s@node01:~$ kubectl get node node01 -o yaml

资源清单配置字段

大部分资源配置清单字段

apiVersion: group/version 表示使用apiServer的版本

apiVersion的版本分了许多组,每个组又有多个版本并存,如果省略"group",表示是核心组。`kubectl api-versions`可获取当前apiserver有哪些分组以及版本。

kind: <String> 资源类别

metadata: <Object> 元数据

object一般有以下对象:
name:  名称
namespace: 名称空间
labels:  标签
annotations:  注解
selfLink:  资源的自引用地址,格式为: /api/GROUP/VERSION/namespaces/NAMESPACE/TYPE/NAME,如:“selfLink: /api/v1/namespaces/default/pods/myapp-dep-c988cf69-2dps2”

spec: <Object> 定义用户对资源期望的目标状态

status: <Object> 资源的当前状态,该字段由k8s集群动态维护,用户不可定义该字段,对用户只读

资源配置帮助信息获取

资源配置清单中所用到的字段众多,能实现对资源的各种定义,帮助的获取对运维人员尤其重要,好在kubectl命令为我们提供了对各种资源定义时的帮助信息。

# 获取用户能定义哪些资源类型
k8s@node01:~$ kubectl api-resources

# 使用explain选项查看指定类型资源的定义帮助信息
k8s@node01:~$ kubectl explain --help

# 查看pods资源的帮助
k8s@node01:~$ kubectl explain pods

# 查看pods下spec字段的帮助,如果还有下一级,依此类推
k8s@node01:~$ kubectl explain pods.spec

自主式pod配置清单事例

k8s@node01:~/my_manifests$ pwd
/home/k8s/my_manifests
k8s@node01:~/my_manifests$ cat pods-demo.yaml
apiVersion: v1
kind: Pod
metadata:
        name: pod-demo
        namespace: default
        labels:
                app: myapp
                tier: frontend
spec:
        containers:
                - name: app
                  image: ikubernetes/myapp:v1
                  imagePullPolicy: IfNotPresent
                - name: bbox
                  image: busybox:latest
                  imagePullPolicy: IfNotPresent
                  command:
                  - "/bin/sh"
                  - "-c"
                  - "sleep 3600"

yaml语法说明:

使用缩进表示层级关系,缩进的空格数不重要,只要相同层级的元素左对齐即可。如果是对象(Object),也叫映射(mapping)/哈希(hash)/字典(dictionary)。

对象键值对使用冒号结构表示 key: value,冒号后面要加一个空格,key的值是一个对象,则使用 key:{key1: value1, key2: value2, ...},也可以使用缩进表示

key: 
    child-key: value
    child-key2: value2

- 开头的行表示构成一个数组

- A
- B

事例中

labels:
       app: myapp
       tier: frontend
可以改写为
labels: {app: myapp, tier: frontend}

###########
containers:
                - name: app
                  image: ikubernetes/myapp:v1
                  imagePullPolicy: IfNotPresent
                - name: bbox
                  image: busybox:latest
                  imagePullPolicy: IfNotPresent
                  command:
                  - "/bin/sh"
                  - "-c"
                  - "sleep 3600"
可改写为
containers: [{name: app, image: ikubernetes/myapp:v1, imagePullPolicy: IfNotPresent}, {name: bbox, image: busybox:latest, command: ["/bin/sh", "-c", "sleep 3600"]}]

但实际中缩写yaml文件都保持yaml的风格,不太会使用{}[]

应用yaml文件

k8s@node01:~/my_manifests$ kubectl create -f pods-demo.yaml  # 根据资源清单创建相应资源
pod/pod-demo created

k8s@node01:~$ kubectl get pods
NAME                                  READY   STATUS    RESTARTS   AGE
myapp-dep-c988cf69-2dps2              1/1     Running   0          3h13m
myapp-dep-c988cf69-hjm8j              1/1     Running   0          3h14m
myapp-dep-c988cf69-j56hp              1/1     Running   0          3h13m
mynginx-deployment-646959f957-jqq67   1/1     Running   0          3h13m
pod-demo                              2/2     Running   0          84s

k8s@node01:~/my_manifests$ kubectl delete -f pods-demo.yaml  # 根据资源清单删除相应的资源
pod/pod-demo created

猜你喜欢

转载自blog.51cto.com/zhaochj/2532137