k8s之资源清单配置

1.什么是资源清单

在k8s中,一般使用yaml格式的文件来创建符合我们预期期望的pod,这样的yaml文件我们一般称为资源清单

2.资源清单的格式

apiVersion: group/apiversion  # 如果没有给定group名称,那么默认为croe,可以使用kubectl api-versions 获取当前k8s版本上所有的apiVersion版本信息(每个版本可能不同)
kind:       #资源类别
metadata:  #资源元数据
   name
   namespace  #k8s自身的namespace
   lables
   annotations   #主要目的是方便用户阅读查找
spec:期望的状态(disired state)
status:当前状态,本字段有kubernetes自身维护,用户不能去定义

配置清单主要有五个一级字段,其中status用户不能定义,由k8s自身维护

3.获取资源的apiVersion版本及资源配置的帮助

1)获取apiVersion版本信息

在这里插入图片描述
2)获取资源的apiVersion版本信息

在这里插入图片描述

在这里插入图片描述
可以看的出来,不同的资源可能属于不同的apiVersion版本

4.资源清单配置

(1) 以pod为例,创建一个简单的yaml文件

apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  containers:
    - name: myapp
      image: myapp:v1
      imagePullPolicy: IfNotPresent

在这里插入图片描述
(2) 在一个pod中创建两个容器

apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  containers:
    - name: myapp
      image: reg.westos.org/k8s/myapp:v1
      imagePullPolicy: IfNotPresent      
    - name: demo
      image: reg.westos.org/k8s/busyboxplus
      imagePullPolicy: IfNotPresent
[kubeadm@server1 manifest]$ kubectl create -f pod.yaml 
pod/myapp created
[kubeadm@server1 manifest]$ kubectl get pod
NAME    READY   STATUS             RESTARTS   AGE
myapp   1/2     CrashLoopBackOff   1          8s
[kubeadm@server1 manifest]$ kubectl get pod
NAME    READY   STATUS             RESTARTS   AGE
myapp   1/2     CrashLoopBackOff   1          16s
[kubeadm@server1 manifest]$ kubectl get pod
NAME    READY   STATUS     RESTARTS   AGE
myapp   1/2     NotReady   3          48s
[kubeadm@server1 manifest]$ kubectl get pod
NAME    READY   STATUS     RESTARTS   AGE
myapp   1/2     NotReady   3          52s
[kubeadm@server1 manifest]$ 

在这里插入图片描述
由于busyboxplus是非交互式的,所以认为容器没有启动,失败了。

编辑文件添加 tty:true

在这里插入图片描述

[kubeadm@server1 manifest]$ kubectl create -f pod.yaml 
pod/myapp created
[kubeadm@server1 manifest]$ kubectl get pod
NAME    READY   STATUS    RESTARTS   AGE
myapp   2/2     Running   0          21s
[kubeadm@server1 manifest]$ 

在这里插入图片描述

此时这个pod里面有两个容器。

备注:同一个pod里面的容器可以共享网络栈和存储

连接pod中的一个容器 demo(busyboxplus)

[kubeadm@server1 manifest]$ kubectl exec -it myapp -c demo -- sh
/ # 
/ # curl localhost
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
/ # 可以访问到另外一个容器

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

指定端口映射,进行外部访问

apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  containers:
    - name: myapp
      image: reg.westos.org/k8s/myapp:v1
      imagePullPolicy: IfNotPresent
      ports:
        - containerPort: 80
          hostPort: 80

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

[kubeadm@server1 manifest]$ curl server2
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
[kubeadm@server1 manifest]$ curl server2
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
[kubeadm@server1 manifest]$

在这里插入图片描述

[root@foundation8 kiosk]# curl server2
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
[root@foundation8 kiosk]# curl server2
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
[root@foundation8 kiosk]# 

测试resources参数

apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  containers:
    - name: myapp
      image: reg.westos.org/k8s/myapp:v1
      imagePullPolicy: IfNotPresent
      ports:
        - containerPort: 80
          hostPort: 80
      resources:
        limits:
          memory: 100M
        requests:
          memory: 50M

在这里插入图片描述

指定pod的运行节点 (这里指定为server3)

[kubeadm@server1 manifest]$ kubectl get nodes --show-labels 
NAME      STATUS   ROLES    AGE   VERSION   LABELS
server1   Ready    master   18h   v1.18.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=server1,kubernetes.io/os=linux,node-role.kubernetes.io/master=
server2   Ready    <none>   18h   v1.18.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=server2,kubernetes.io/os=linux
server3   Ready    <none>   18h   v1.18.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=server3,kubernetes.io/os=linux
[kubeadm@server1 manifest]$ 
apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  containers:
    - name: myapp
      image: reg.westos.org/k8s/myapp:v1
      imagePullPolicy: IfNotPresent
      ports:
        - containerPort: 80
          hostPort: 80
  nodeSelector:
    kubernetes.io/hostname: server3

在这里插入图片描述

测试hostNetwork参数

apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  containers:
    - name: myapp
      image: reg.westos.org/k8s/myapp:v1
      imagePullPolicy: IfNotPresent
      ports:
        - containerPort: 80
          hostPort: 80
  nodeSelector:
    kubernetes.io/hostname: server3
  hostNetwork: true

此时不能在该pod上启动占用80端口的容器

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值