一、资源清单简介

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
二、自主式Pod资源清单

删除之前pod
[root@server2 manifest]# kubectl delete svc myapp
[root@server2 manifest]# kubectl delete deployments.apps myapp

在这里插入图片描述

[root@server2 manifest]# kubectl get all
NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   45h

创建资源清单的参考文章
参考地址:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#deployment-v1-apps

kubectl explain pod //查询帮助文档

在这里插入图片描述
在server2主机上

mkdir manifest
cd manifest/
[root@server2 manifest]# vim pod.yml 
[root@server2 manifest]# vim  pod.yml 
apiVersion: v1  指明api资源属于哪个群组和版本,同一个组可以有多个版本
kind: Pod    标记创建的资源类型
metadata:  元数据
  name: myapp  对象名称自定义
spec:  定义目标资源的期望状态
  containers:  容器
    - name: myapp  名称自定义
      image: myapp:v1  定义镜像

[root@server2 manifest]# kubectl create -f  pod.yml   创建
pod/myapp created
[root@server2 manifest]# kubectl get pod  查看
NAME    READY   STATUS    RESTARTS   AGE
myapp   1/1     Running   0          26s
[root@server2 manifest]# kubectl get pod -o wide
NAME    READY   STATUS    RESTARTS   AGE   IP           NODE      NOMINATED NODE   READINESS GATES
myapp   1/1     Running   0          35s   10.244.2.9   server4   <none>           <none>
[root@server2 manifest]# curl 10.244.2.9  访问
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

自主式资源清单更换镜像

[root@server2 manifest]# kubectl delete -f pod.yml   先删除之前创建的
pod "myapp" deleted
[root@server2 manifest]# vim pod.yml   更改镜像
apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  containers:
    - name: myapp
      image: myapp:v2  改为v2

[root@server2 manifest]# kubectl create -f  pod.yml   建立
pod/myapp created
[root@server2 manifest]# kubectl get pod -o wide
NAME    READY   STATUS    RESTARTS   AGE   IP            NODE      NOMINATED NODE   READINESS GATES
myapp   1/1     Running   0          4s    10.244.1.11   server3   <none>           <none>
[root@server2 manifest]# curl 10.244.1.11   测试访问
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>

不删除pod直接更换镜像

[root@server2 manifest]# \vi pod2.yml 
[root@server2 manifest]# vim pod2.yml 
[root@server2 manifest]# cat  pod2.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
  # Unique key of the Deployment instance
  name: deployment-example
spec:
  # 3 Pods should exist at all times.
  replicas: 3  副本三个
  selector:  选择器
    matchLabels:  
      app: nginx  标签
  template:
    metadata:
      labels:
        # Apply this label to pods and default
        # the Deployment label selector to this value
        app: nginx
    spec:
      containers:
      - name: nginx
        # Run this image
        image: myapp:v1  指定镜像

在这里插入图片描述
更换镜像

[root@server2 manifest]# vim pod2.yml 
[root@server2 manifest]# cat  pod2.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
  # Unique key of the Deployment instance
  name: deployment-example
spec:
  # 3 Pods should exist at all times.
  replicas: 5  副本改为五个
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        # Apply this label to pods and default
        # the Deployment label selector to this value
        app: nginx
    spec:
      containers:
      - name: nginx
        # Run this image
        image: myapp:v2  镜像换v2

在这里插入图片描述
三、交互式进入pod内部

[root@server2 manifest]# vim pod.yml 
[root@server2 manifest]# cat pod.yml 
apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  containers:
    - name: myappv1
      image: myapp:v1
    - name: demo
      image: busyboxplus   运行后会有交互式shell
      tty: true   打开一个终端
      stdin: true
      stdinOnce: true
[root@server2 manifest]# kubectl apply -f pod.yml   创建pod的两个容器
pod/myapp created
[root@server2 manifest]# kubectl get pod   查看两个都在运行
NAME    READY   STATUS    RESTARTS   AGE
myapp   2/2     Running   0          4s

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
访问含有交互式shell的容器

[root@server2 manifest]# kubectl attach myapp -c demo -it

这两个容器会共享网络;容器内部是可以互相访问的,进入busyboxplusd的交互式shell可以访问到myapp:v1的页面
在这里插入图片描述
访问没有交互式shell的容器

[root@server2 manifest]# kubectl exec -it myapp -c myappv1 -- sh

在这里插入图片描述
别名设定

/etc/nginx/conf.d # vi default.conf 
/etc/nginx/conf.d # 

在这里插入图片描述
在这里插入图片描述
四、pod镜像拉取策略和容器的端口映射
4.1默认拉取策略

kubectl explain pod.spec.containers 查看拉取策略
总是拉取最新的镜像

在这里插入图片描述
自定义镜像拉取策略

Always:意思是每次都尝试重新拉取镜像
Nerver: 表示仅适用本地镜像源
ifNotPresent: 表示如果本地有就用本地的,没有就拉取在线镜像
以上三个都不定义:默认是第一个Always:每次都重新拉取镜像
[root@server2 manifest]# vim pod.yml 
[root@server2 manifest]# cat pod.yml 
apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  containers:
    - name: myappv1
      image: myapp:v1
    - name: demo
      image: busyboxplus
      tty: true
      stdin: true
      stdinOnce: true
      imagePullPolicy: ifNotPresent

4.2容器的端口映射

[root@server2 manifest]# cat pod.yml 
apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  containers:
    - name: myappv1
      image: myapp:v1
      ports:
      - name: http
        containerPort: 80   80端口映射到80
        hostPort: 80  

在这里插入图片描述
在这里插入图片描述
4.3定义使用主机网络模式

容器使用主机网络模式就是在使用宿主机的网络IP,但是只能有一个不能有副本,因为主机上的80端口只有一个
[root@server2 manifest]# cat  pod.yml 
apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  containers:
    - name: myappv1
      image: myapp:v1
  hostNetwork: true  使用主机网络模式
[root@server2 manifest]# kubectl delete -f pod.yml 
pod "myapp" deleted
[root@server2 manifest]# 
[root@server2 manifest]# kubectl apply -f pod.yml 
pod/myapp created
[root@server2 manifest]# kubectl get pod -o wide   IP已经变为主机IP
NAME    READY   STATUS    RESTARTS   AGE   IP             NODE      NOMINATED NODE   READINESS GATES
myapp   1/1     Running   0          9s    172.25.254.3   server3   <none>           <none>
[root@server2 manifest]# curl 172.25.254.3  直接访问主机IP
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

五、定义pod的重启策略
三个参数:
Always:Pod一旦终止运行,则无论是容器如何终止的,kubelet服务都将重启它;
OnFailuer:只有pod以非零退出码终止时,kubelet才会重启它,如果正常结束(退出码为0),则kubelet将不会重启它;
Nerver:Pod终止后,kubelet将退出码告诉给master;不会重启pod。

 kubectl run demo --image=busyboxplus -it --restart=Never 退出之后不重启服务

在这里插入图片描述

[root@server2 manifest]# kubectl delete pod demo
apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  containers:
    - name: myappv1
      image: myapp:v1
  restartPolicy: Never  退出之后不重启,写在清单中所有服务都是

在这里插入图片描述
六、限制pod资源

[root@server2 manifest]# vim pod.yml 
[root@server2 manifest]# cat pod.yml 
apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  containers:
    - name: myappv1
      image: myapp:v1
      resources:     指定资源限制和资源请求的值
        requests:    指定容器启动和调度时的限制设置
          memory: 100Mi  内存请求容器启动时初始化的可用数量
          cpu: 0.1        CPU请求容器启动时初始化的可用数量
        limits:     指定容器运行时资源的运行上限
          memory: 200Mi   指定内存限制单位为MiB和GiB
          cpu: 0.2    指定CPU限制

[root@server2 manifest]# kubectl apply -f pod.yml 
pod/myapp created
[root@server2 manifest]# kubectl get pod
NAME    READY   STATUS    RESTARTS   AGE
myapp   1/1     Running   0          5s
[root@server2 manifest]# kubectl describe pod myapp  查看详细信息

在这里插入图片描述
七、定义Node的label过滤标签,以key:value格式指定(节点选择器)
在这里插入图片描述

[root@server2 manifest]# vim pod.yml 
[root@server2 manifest]# cat pod.yml 
apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  containers:
    - name: myappv1
      image: myapp:v1
      resources:
        requests:
          memory: 100Mi
          cpu: 0.1
        limits:
          memory: 200Mi
          cpu: 0.2
  nodeSelector: 
    kubernetes.io/hostname: server3  自定义节点选择器,之前在server4
[root@server2 manifest]# kubectl apply -f pod.yml 
pod/myapp created
[root@server2 manifest]# kubectl get pod -o  wide  运行在server上
NAME    READY   STATUS    RESTARTS   AGE   IP            NODE      NOMINATED NODE   READINESS GATES
myapp   1/1     Running   0          9s    10.244.1.27   server3   <none>           <none>

在这里插入图片描述
八、定义pod的标签

kubectl get pod --show-labels   //查看标签
 kubectl get pod -l app      //过滤包含app的标签
kubectl label pod demo version=v1    //打标签
kubectl label pod demo app=nginx --overwrite    //更改标签
[root@server2 manifest]# cat  pod.yml
apiVersion: v1
kind: Pod
metadata:
  name: myapp
  labels:  标签
    app: myapp  定义标签自定义
spec:
  containers:
    - name: myappv1
      image: myapp:v1
      resources:
        requests:
          memory: 100Mi
          cpu: 0.1
        limits:
          memory: 200Mi
          cpu: 0.2
  nodeSelector: 
    kubernetes.io/hostname: server3

在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐