Kubernetes(k8s)三、编写资源清单(创建pod、控制器、掌握书写要点)

调用api

格式如下:

apiVersion: group/version  //指明api资源属于哪个群组和版本,同一个组可以有多个版本
        $ kubectl api-versions		//查询命令    

kind: 		//标记创建的资源类型,k8s主要支持以下资源类别
       Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Cronjob
    
metadata:	//元数据
        name:	//对像名称
        namespace:	//对象属于哪个命名空间
        labels:	//指定资源标签,标签是一种键值数据

spec: 		//定义目标资源的期望状态

kubectl explain pod //查询帮助文档
kubectl explain pod.metadata 继续查看

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
删掉之前的所有部署
在这里插入图片描述

示例一:创建简单的pod

[root@server2 ~]# cat pod.yml 
apiVersion: v1
kind: Pod 
metadata:
  name: nginx
  namespace: default
spec:
  containers:
  - name: nginx
    image: myapp:v1
    imagePullPolicy: IfNotPresent

kubectl apply -f pod.yml 创建

在这里插入图片描述
kubectl delete -f pod.yml 删除

示例二:创建控制器

注解: 镜像拉取策略: imagePullPolicy: IfNotPresent 当本地有镜像,不拉取
每个容器在建立的时候都会继承相应的标签,控制器通过匹配标签监控pod,副本数

[root@server2 ~]# cat pod.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      run: nginx
  template:
    metadata:
      labels:
        run: nginx
    spec:
      containers:
      - name: nginx
        image: myapp:v1
        imagePullPolicy: IfNotPresent

kubectl apply -f pod.yml 创建
在这里插入图片描述

在资源清单里面能够重复使用,在改变副本数,及镜像版本的更新,直接在文件里面改变参数即可

一个pod也可以用多个容器,

将命令直接输出成yaml格式,复制粘贴

在这里插入图片描述

示例三。资源limit(上限消耗),request(最少)

如果超过资源上限,会被kill掉

[root@server2 ~]# cat pod2.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      run: nginx
  template:
    metadata:
      labels:
        run: nginx
    spec:
      containers:
      - name: nginx
        image: myapp:v1
        imagePullPolicy: IfNotPresent
        resources:
          requests:
            cpu: 100m   #1/10的cpu
            memory: 100Mi  #至少有
          limits:
            cpu: 0.5 #500m  0.5个
            memory: 512Mi
       

在这里插入图片描述
在这里插入图片描述

restartpolicy 默认总是always, 当退出的时候,默认重启


[root@server2 ~]# kubectl attach demo -it
Defaulting container name to demo.
Use 'kubectl describe pod/demo -n default' to see all of the containers in this pod.
If you don't see a command prompt, try pressing enter.
/ # Session ended, resume using 'kubectl attach demo -c demo -i -t' command when the pod is running
[root@server2 ~]# kubectl get pod
NAME                   READY   STATUS    RESTARTS   AGE
demo                   1/1     Running   4          3h15m

示例四、假设有两个节点,将pod指定节点

在此位置修改
spec:
nodeName: server3

#nodeName: server3

或者
标签
在这里插入图片描述

nodeSelector
    kubernetes.io/hostname=server4

示例五:hostNetwork 继承主机网络

 spec:
      #nodeName: server3
      hostNetwork: True

修改的位置
在这里插入图片描述

在这里插入图片描述
直接访问到主机名
在这里插入图片描述

示例六:两个容器,资源共享 (注意不要有网络冲突)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

标签:

$ kubectl get pod --show-labels //查看标签
NAME READY STATUS RESTARTS AGE LABELS
demo 2/2 Running 0 8s app=demo
$ kubectl get pod -l app //过滤包含app的标签
NAME READY STATUS RESTARTS AGE
demo 2/2 Running 0 34s
$ kubectl get pod -L app
NAME READY STATUS RESTARTS AGE APP
demo 2/2 Running 0 39s demo
$ kubectl label pod demo version=v1//打标签
pod/demo labeled
pod 也可以节点也可以执行
在这里插入图片描述

$kubectl label pod demo app=myapp --overwrite//更改标签
pod/demo labeled
$ kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
demo 2/2 Running 0 5m40s app=myapp,version=v1

删除标签

在这里插入图片描述
在这里插入图片描述

节点标签选择器

$ kubectl label nodes server2 disktype=ssd
node/server2 labeled
$ kubectl get nodes -l disktype
NAME      STATUS   ROLES    AGE   VERSION
server2   Ready    <none>   6d    v1.17.2
在yaml文件中增加标签选择器

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值