k8s资源清单定义入门

k8s资源清单定义入门

k8s的核心资源

workload型资源

  • Pod
  • ReplicaSet
  • Deployment
  • StatefulSet
  • DaemonSet
  • Job
  • Cronjob

服务发现及负载均衡型资源

  • Service
  • ingress

配置与存储相关的资源

  • 存储卷Volume

    • 云端存储
    • 亚马逊弹性块存储
    • SAN
    • GlusterFS(分布式存储)
    • NFS
  • 容器存储接口CSI

  • ConfgMap(配置中心)

  • Secret(保存敏感信息)

  • DovwnwardAPI(将外部环境的信息输出给容器)

集群级资源

  • Nampspace
  • Node
  • Role
  • ClusterRole
  • RoleBinding
  • ClusterRoleBinding

元数据型资源

HPA PodTemplate(用于让控制器创建Pod时使用的模板) LlmitRange

创建资源的方式

使用命令进行创建

使用命令式资源清单创建

apiserver仅接收json格式的资源定义

使用yaml格式提供配置清单,apiserver可自动将其转为json格式并执行

使用声明式资源清单创建

可以确保资源尽可能向声明的状态靠近,并且可以随时改变声明、随时应用新的声明

kind

metadata

name(同一类别下惟一)

namespace

labels

annotations

每个资源的引用PATH(/api/GROUP/VERSION/namespaces/NAMESPACE/TYPE/NAME)

spec(期望的状态)

status

当前的状态,本字段由kubenetes集群维护,用户无法定义和更改

kubectl explain pods

执行kubectl explain pods可以查看pod资源的配置清单应有哪些参数、如何定义等等

kubectl explain pods.metadata

执行kubectl explain pods.metadata可以查看pods的metadata参数如何配置

定义一个基于YAML格式的配置

[root@master manifest]# cat deploy.yaml 
---
apiVersion: v1  
kind: Namespace
metadata:
  name: jjyy

---
apiVersion: apps/v1     #api版本
kind: Deployment        #资源类型
metadata:               #元数据定义
  name: web             #名称
  namespace: jjyy       #名称空间
spec:                   #deployment定义
  replicas: 3           #定义2个副本
  selector:             #标签选择器,匹配pod的标签
    matchLabels:
      app: httpd-web
  template:             #pod模板定义
    metadata:
      labels:           #这里的标签必须和标签选择器的一致
        app: httpd-web
    spec:               #pod内的容器定义
      containers:
      - name: web
        image: aimmi/httpd:v0.2
---
apiVersion: v1
kind: Service
metadata:
  name: web
  namespace: jjyy
spec:
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 80      #容器端口
  selector:
    app: httpd-web
  type: NodePort


[root@master ~]# kubectl apply -f manifest/deploy.yaml 
namespace/jjyy created
deployment.apps/web created
service/web created
[root@master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   3d6h
jjyy              Active   16s
kube-node-lease   Active   3d6h
kube-public       Active   3d6h
kube-system       Active   3d6h

[root@master ~]# kubectl get pods -n jjyy
NAME                   READY   STATUS    RESTARTS   AGE
web-5dbdf86b79-jr8nf   0/1     Running   0          44s
web-5dbdf86b79-wbs7v   0/1     Running   0          44s
web-5dbdf86b79-wf2bt   0/1     Running   0          44s

[root@master ~]# kubectl get svc -n jjyy
NAME   TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
web    NodePort   10.101.215.246   <none>        8080:30033/TCP   83s

[root@master ~]# kubectl get deploy -n jjyy
NAME   READY   UP-TO-DATE   AVAILABLE   AGE
web    3/3     3            0           117s

[root@master ~]# curl 10.101.215.246:8080
test page on 666

[root@master ~]# kubectl delete -f manifest/deploy.yaml 
namespace "jjyy" deleted
deployment.apps "web" deleted
service "web" deleted

[root@master ~]# kubectl get pods -n jjyy
No resources found in jjyy namespace.
[root@master ~]# kubectl get svc -n jjyy
No resources found in jjyy namespace.
[root@master ~]# kubectl create deployment nginx --image=nginx:1.16 -o yaml --dry-run=client > my-deploy.yaml
[root@master ~]# kubectl get deployment nginx -o yaml > my-deploy.yaml
[root@master ~]# kubectl explain pods.pec.containers
[root@master ~]# kubectl explain deployment
上一篇:1074 Reversing Linked List (25 分)


下一篇:k8s的网站管理系统-Dashboard UI