83、 项目的发布和容器的重启策略

news2024/12/26 13:57:23

0、强制删除

[root@master01 ~]# kubectl run --image=nginx:1.22 nginx1
pod/nginx1 created
[root@master01 ~]# kubectl get pod
NAME     READY   STATUS              RESTARTS   AGE
nginx1   0/1     ContainerCreating   0          1s
[root@master01 ~]# kubectl delete pod nginx1 --force --grace-period=0
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
pod "nginx1" force deleted

一、项目的发布方式:

应用升级以及新旧业务切换,这个过程当中如何保证对外的服务正常是一个非常重要的问题。

1.1、三种发布方式:

1、蓝绿发布

把服务器分为蓝组和绿组,先停其中的一部分,先停蓝组,绿组依然对外提供服务,等蓝组更新维护完毕,上线之后,再把绿组关闭维护,可以做业务更新和发布过程的对外服务不受影响。

过去成本比较高。

负载均衡+高可用

特点:一旦出现问题,影响范围比较大

​ 发布策略也比较简单

​ 用户无感知,平滑过渡

缺点:需要大量的后台服务器以作为支持,成本比较高的。

2、金丝雀发布(灰度发布):(例如体验服)

Deployment控制器可以通过自定义控制的方式实现金丝雀发布。

分两组:
pod1-------1.12-----1.18–测试服—192.168.168.81:30000
pod2-------1.12-----1.18–正式服—192.168.168.81:31000

自动化控制的要求很高,整个系统的稳定性比蓝绿的稳定性比蓝绿发布要高。影响范围发布。

副本3个-----3个副本+测试版本(暂停点)-----1个正式,其余两个滚动。

3、滚动发布

部署时间比较慢,但是比较节约资源。发布的策略比较复杂。

1.2、金丝雀的发布流程:

副本3个-----3个副本+测试版本(暂停点)-----测试版没问题,取消暂停--------1个正式,其余两个滚动。

[root@master01 ~]# kubectl create deployment nginx1 --image=nginx:1.12 --replicas=3
deployment.apps/nginx1 created
[root@master01 ~]# kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
nginx1-f7c44b649-2jbnb   1/1     Running   0          3s
nginx1-f7c44b649-chcsz   1/1     Running   0          3s
nginx1-f7c44b649-kkdx8   1/1     Running   0          3s

[root@master01 ~]# kubectl set image deployment/nginx1 nginx=nginx:1.22 && kubectl rollout pause deployment nginx1
deployment.apps/nginx1 image updated
deployment.apps/nginx1 paused
[root@master01 ~]# kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
nginx1-654cb56c4-xg2fb   1/1     Running   0          2s
nginx1-f7c44b649-2jbnb   1/1     Running   0          2m27s
nginx1-f7c44b649-chcsz   1/1     Running   0          2m27s
nginx1-f7c44b649-kkdx8   1/1     Running   0          2m27s
[root@master01 ~]# kubectl get pods -o wide
NAME                     READY   STATUS    RESTARTS   AGE     IP            NODE     NOMINATED NODE   READINESS GATES
nginx1-654cb56c4-xg2fb   1/1     Running   0          10s     10.244.1.44   node01   <none>           <none>
nginx1-f7c44b649-2jbnb   1/1     Running   0          2m35s   10.244.2.41   node02   <none>           <none>
nginx1-f7c44b649-chcsz   1/1     Running   0          2m35s   10.244.1.43   node01   <none>           <none>
nginx1-f7c44b649-kkdx8   1/1     Running   0          2m35s   10.244.2.42   node02   <none>           <none>
[root@master01 ~]# curl -I 10.244.1.44

[root@master01 ~]# kubectl rollout resume deployment/nginx1

[root@master01 ~]# kubectl get pods -o wide
NAME                     READY   STATUS    RESTARTS   AGE    IP            NODE     NOMINATED NODE   READINESS GATES
nginx1-654cb56c4-829qg   1/1     Running   0          19s    10.244.2.44   node02   <none>           <none>
nginx1-654cb56c4-czmkk   1/1     Running   0          21s    10.244.2.43   node02   <none>           <none>
nginx1-654cb56c4-xg2fb   1/1     Running   0          2m5s   10.244.1.44   node01   <none>           <none>

[root@master01 ~]# curl -I 10.244.1.44


1.3、声明式的管理方式:

YAML文件实现:

YAML文件:

deployment:部署方式

service的部署方式

[root@master01 ~]# cd /opt/
[root@master01 opt]# mkdir k8s-yaml/
[root@master01 opt]# cd k8s-yaml/
[root@master01 k8s-yaml]# ls
[root@master01 k8s-yaml]# vim nginx-deploy.yaml

#api的标签
apiVersion:  apps/v1
kind: Deployment
#定义资源的类型/角色 kind的类型:deployment Job Ingress sevice Deamonset
metadata:
#定义创建资源的元数据的信息,资源的名称--pod的名称,命名空间,pod的标签
  name: nginx1
#  namespace: 
  labels:
    app: nginx1
#标签名:app=nginx1 上下文要一致
spec:
#顶格写属于全局配置,spec配置deployment资源需要的参数属性,副本数,匹配的标签以及>容器的重启策略。
  replicas: 3
#定义该资源的pod的数量
  selector:
    matchLabels:
#selector定义标签的选择器 match:定义匹配的标签,这里需要上下文要保持一致
      app: nginx1
#都是定义容器和pod的元数据
  template:
#定义业务模板,定义了3个模板,所有的pod的属性都会和template的设置保持一致。
    metadata:
      labels:
        app: nginx1
#这里也需要和上下文保持一致
    spec:
#定义pod内的容器
      containers:
      - name: nginx
        image: nginx:1.22
#--image=nginx:1.22
        ports:
        - containerPort: 8080
        
##如果nginx的端口默认的就是80.ports可以不写,写了也无法改变容器内的端口
##如果默认端口不是80,那就需要加上ports申明非默认端口。
##dockerfile起来的nginx端口就是80。

pod和容器是分开也是合并的,镜像定义容器,pod不能改变镜像

[root@master01 k8s-yaml]# kubectl apply -f nginx-deploy.yaml   
[root@master01 k8s-yaml]# kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
nginx1-654cb56c4-bsphh   1/1     Running   0          32s
nginx1-654cb56c4-crrwp   1/1     Running   0          32s
nginx1-654cb56c4-h6gwp   1/1     Running   0          32s


[root@master01 k8s-yaml]# kubectl apply -f nginx-deploy.yaml  ##重新识别配置文件
[root@master01 k8s-yaml]# kubectl delete -f nginx-deploy.yaml   ##删除资源对象

------------------以上通过yaml文件拉取镜像------------------------


-----------------以下通过yaml文件配置网络---------------------------------

[root@master01 k8s-yaml]# vim nginx-service.yaml

#定义api的标签
apiVersion: v1
kind: Service
metadata:
#定义service的名称和标签
  name: nginx1-svc
  labels:
    app1: nginx1
spec:
#定义service的资源参数,端口映射,类型,匹配的标签名(和哪个资源对象进行匹配)
  type: NodePort
  ports:
  - port: 80
#service的端口
    targetPort: 80
#容器内的端口
    nodePort: 30000
  selector:
    app: nginx1

[root@master01 k8s-yaml]# kubectl apply -f nginx-service.yaml
service/nginx1-svc created

[root@master01 k8s-yaml]# kubectl get pod -o wide  ##查看容器ip、所在节点信息

[root@master01 k8s-yaml]# kubectl get svc     ##查看service
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1     <none>        443/TCP        2d21h
nginx1-svc   NodePort    10.96.2.252   <none>        80:30000/TCP   7m11s



[root@master01 k8s-yaml]# kubectl explain deployment

[root@master01 k8s-yaml]# kubectl explain service

[root@master01 k8s-yaml]# kubectl explain pod
#主机端口,直接让主机端口和容器端口做映射(只能在yaml文件当中表示)
[root@master01 k8s-yaml]# vim nginx-pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx-pod
spec:
#声明容器的参数:
  containers:
  - name: nginx
    image: nginx:1.22
    ports:         
    - containerPort: 80
      hostPort: 80  #主机端口,直接让主机端口和容器端口做映射(只能在yaml文件当中表示)

[root@master01 k8s-yaml]# kubectl get pod -o wide
NAME                     READY   STATUS      RESTARTS   AGE    IP            NODE     NOMINATED NODE   READINESS GATES
centos-pod               0/1     Completed   0          10m    10.244.2.55   node02   <none>           <none>
nginx-pod                1/1     Running     0          110s   10.244.1.50   node01   <none>           <none>
nginx1-654cb56c4-bsphh   1/1     Running     0          151m   10.244.2.47   node02   <none>           <none>
nginx1-654cb56c4-crrwp   1/1     Running     0          151m   10.244.2.46   node02   <none>           <none>
nginx1-654cb56c4-h6gwp   1/1     Running     0          151m   10.244.1.47   node01   <none>           <none>

[root@master01 k8s-yaml]# kubectl exec -it nginx-pod bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@nginx-pod:/# echo 123 > /usr/share/nginx/html/index.html 
root@nginx-pod:/# exit
exit


[root@master01 k8s-yaml]# curl 192.168.168.81
curl: (7) Failed connect to 192.168.168.81:80; 拒绝连接
[root@master01 k8s-yaml]# curl 192.168.168.82 ##只能curl--node01---nginx-pod 
123




[root@master01 k8s-yaml]# kubectl exec -it nginx1-654cb56c4-bsphh bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@nginx1-654cb56c4-bsphh:/# echo 456 > /usr/share/nginx/html/index.html
root@nginx1-654cb56c4-bsphh:/# exit
exit
[root@master01 k8s-yaml]# kubectl exec -it nginx1-654cb56c4-crrwp bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@nginx1-654cb56c4-crrwp:/# echo 477 > /usr/share/nginx/html/index.html
root@nginx1-654cb56c4-crrwp:/# exit
exit
[root@master01 k8s-yaml]# kubectl exec -it nginx1-654cb56c4-h6gwp bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@nginx1-654cb56c4-h6gwp:/# echo 488 > /usr/share/nginx/html/index.html
root@nginx1-654cb56c4-h6gwp:/# exit
exit

[root@master01 k8s-yaml]# curl 192.168.168.81
curl: (7) Failed connect to 192.168.168.81:80; 拒绝连接
[root@master01 k8s-yaml]# curl 192.168.168.81:30000
477
[root@master01 k8s-yaml]# curl 192.168.168.81:30000
488
[root@master01 k8s-yaml]# curl 192.168.168.81:30000
456
[root@master01 k8s-yaml]# curl 192.168.168.82:30000
477
[root@master01 k8s-yaml]# curl 192.168.168.82:30000
488
[root@master01 k8s-yaml]# curl 192.168.168.82:30000
456


在这里插入图片描述

[root@master01 k8s-yaml]# vim nginx-deploy.yaml 

#api的标签
apiVersion:  apps/v1
kind: Deployment
#定义资源的类型/角色 kind的类型:deployment Job Ingress sevice Deamonset
metadata:
#定义创建资源的元数据的信息,资源的名称--pod的名称,命名空间,pod的标签
  name: nginx1
#  namespaces: 
  labels:
    app: nginx1
#标签名:app=nginx1 上下文要一致
spec:
#顶格写属于全局配置,spec配置deployment资源需要的参数属性,副本数,匹配的标签以及>容器的重启策略。
  replicas: 3
#定义该资源的pod的数量
  selector:
    matchLabels:
#selector定义标签的选择器 match:定义匹配的标签,这里需要上下文要保持一致
      app: nginx1
#都是定义容器和pod的元数据
  template:
#定义业务模板,定义了3个模板,所有的pod的属性都会和template的设置保持一致。
    metadata:
      labels:
        app: nginx1
#这里也需要和上下文保持一致
    spec:
#定义pod内的容器
      containers:
      - name: nginx
        image: nginx:1.22
#--image=nginx:1.22
        ports:
        - containerPort: 80
          hostPort: 80

[root@master01 k8s-yaml]# kubectl apply -f nginx-deploy.yaml 
[root@master01 k8s-yaml]# kubectl get pod -o wide
NAME                     READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
nginx1-b554bf8c5-46zls   1/1     Running   0          21s   10.244.1.51   node01   <none>           <none>
nginx1-b554bf8c5-l26mw   1/1     Running   0          21s   10.244.2.56   node02   <none>           <none>
nginx1-b554bf8c5-tj844   0/1     Pending   0          21s   <none>        <none>   <none>           <none>
[root@master01 k8s-yaml]# kubectl logs -f nginx1-b554bf8c5-tj844
[root@master01 k8s-yaml]# kubectl describe pod nginx1-b554bf8c5-tj844


Events:
  Type     Reason            Age                From               Message
  ----     ------            ----               ----               -------
  Warning  FailedScheduling  61s (x2 over 61s)  default-scheduler  0/3 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate, 2 node(s) didn't have free ports for the requested pod ports. ##端口只有一个80,端口占用

[root@node01 ~]# netstat -antp | grep 80
tcp        0      0 10.96.0.1:49980         10.96.0.1:443           ESTABLISHED 4759/flanneld 

--------------node02--80端口被占用,起了一个nginx容器,但是可以访问----------

[root@master01 k8s-yaml]# curl 192.168.168.82
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>

[root@master01 k8s-yaml]# curl 192.168.168.83
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>

单节点访问,用于内部访问,占用宿主机的80端口,而且不能做负载均衡


删除各种pod、容器
[root@master01 k8s-yaml]# kubectl delete svc nginx1-svc 
service "nginx1-svc" deleted

[root@master01 k8s-yaml]# kubectl delete -f nginx-pod.yaml          ##删除nginx-pod.yaml文件未改动创建的pod
pod "nginx-pod" deleted
[root@master01 k8s-yaml]# kubectl delete pod centos-pod                 ##删除nginx-pod创建的pod
pod "centos-pod" deleted
[root@master01 k8s-yaml]# kubectl delete deployments.apps nginx1   ##删除nginx-deploy.yaml创建的pod
deployment.apps "nginx1" deleted

二、容器的重启策略和传参:

restartPolicy:

Always:只要启动失败,就会一直重启容器

Never:从不重启 docker的默认模式

Onfailure:只有容器异常退出时,才会重启。返回码非0时才会对容器进行重启。

如果是deployment,那么容器只能是Always,默认是Always,可以不写。

基于pod的yaml,三种类型都可以。

pod内的传参:

command和arges

在yaml文件当中command和args只能存在一个

args可以给command传参

Always:一直重启
apiVersion: v1
kind: Pod
metadata:
  name: centos-pod
  labels:
    app: nginx-pod
spec:
#声明容器的参数:
  containers:
  - name: centos
    image: centos:7
    ports:
    - containerPort: 80
      hostPort: 80
#主机端口,直接让主机端口和容器端口做映射(只能在yaml文件当中表示)
  restartPolicy: Always
[root@master01 k8s-yaml]# kubectl apply -f nginx-pod.yaml --force  
pod/centos-pod configured

[root@master01 k8s-yaml]# kubectl delete -f nginx-pod.yaml 

[root@master01 k8s-yaml]# kubectl get pod -o wide
NAME         READY   STATUS      RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
centos-pod   0/1     Completed   3       (一直在重启)    61s   10.244.2.59   node02   <none>           <none>



Never:从不重启,docker的默认模式
apiVersion: v1
kind: Pod
metadata:
  name: centos-pod
  labels:
    app: nginx-pod
spec:
#声明容器的参数:
  containers:
  - name: centos
    image: centos:7
    ports:
    - containerPort: 80
      hostPort: 80
#主机端口,直接让主机端口和容器端口做映射(只能在yaml文件当中表示)
  restartPolicy: Never
  
[root@master01 k8s-yaml]# kubectl apply -f nginx-pod.yaml 
pod/centos-pod created
[root@master01 k8s-yaml]# kubectl get pod -o wide
NAME         READY   STATUS      RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
centos-pod   0/1     Completed   0      (从不重启)    40s   10.244.2.60   node02   <none>           <none>


删除pod
[root@master01 k8s-yaml]# kubectl delete -f nginx-pod.yaml 
pod "centos-pod" deleted


第二种:
[root@master01 k8s-yaml]# vim nginx-pod.yaml


apiVersion: v1
kind: Pod
metadata:
  name: centos-pod
  labels:
    app: nginx-pod
spec:
#声明容器的参数:
  containers:
  - name: centos
    image: centos:7
#主机端口,直接让主机端口和容器端口做映射(只能在yaml文件当中表示)
  restartPolicy: Never



[root@master01 k8s-yaml]# kubectl apply -f nginx-pod.yaml 
pod/centos-pod created
[root@master01 k8s-yaml]# kubectl get pod -o wide
NAME         READY   STATUS      RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
centos-pod   0/1     Completed   0    (从不重启)      10s   10.244.2.61   node02   <none>           <none>



pod容器执行命令
[root@master01 k8s-yaml]# vim nginx-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: centos-pod
  labels:
    app: nginx-pod
spec:
#声明容器的参数:
  containers:
  - name: centos
    image: centos:7
    args:
    - /bin/bash
    - -c
    - while true; do sleep 3600; done   ##

#主机端口,直接让主机端口和容器端口做映射(只能在yaml文件当中表示)
 # restartPolicy: Always


[root@master01 k8s-yaml]# kubectl apply -f nginx-pod.yaml --force
pod/centos-pod configured





apiVersion: v1
kind: Pod
metadata:
  name: centos-pod
  labels:
    app: nginx-pod
spec:
#声明容器的参数:
  containers:
  - name: centos
    image: centos:7
    args:
    ["/bin/bash","-c"," while true; do sleep 3600; done"]
#主机端口,直接让主机端口和容器端口做映射(只能在yaml文件当中表示)
 # restartPolicy: Always
~                         
args命令格式
[root@master01 k8s-yaml]# vim nginx-pod.yaml 

apiVersion: v1
kind: Pod
metadata:
  name: centos-pod
  labels:
    app: nginx-pod
spec:
#声明容器的参数:
  containers:
  - name: centos
    image: centos:7
    args:
    - /bin/bash
    - -c
    - while true; do sleep 3600; done
    #结果为真的时候,后台休眠3600s
[root@master01 k8s-yaml]# kubectl apply -f nginx-pod.yaml --force   ##强制执行

[root@master01 k8s-yaml]# kubectl get pod -o wide
NAME         READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
centos-pod   1/1     Running   0          22s   10.244.2.62   node02   <none>           <none>
[root@master01 k8s-yaml]# kubectl delete -f nginx-pod.yaml 
pod "centos-pod" deleted


第二种写法:
[root@master01 k8s-yaml]# vim nginx-pod.yaml 

apiVersion: v1
kind: Pod
metadata:
  name: centos-pod
  labels:
    app: nginx-pod
spec:
#声明容器的参数:
  containers:
  - name: centos
    image: centos:7
    args: ["/bin/bash","-c"," while true; do sleep 3600; done"]  ##永远为真,死循环
    #结果为真的时候,后台休眠3600s

在这里插入图片描述

[root@master01 k8s-yaml]# kubectl apply -f nginx-pod.yaml --force   ##强制执行,pod的yaml会提示出现提示重复,提示内容没有发送变化,需要加上--force强制执行



[root@master01 k8s-yaml]# kubectl apply -f nginx-pod.yaml 
The Pod "centos-pod" is invalid: spec: Forbidden: pod updates may not change fields other than `spec.containers[*].image`, `spec.initContainers[*].image`, `spec.activeDeadlineSeconds` or `spec.tolerations` (only additions to existing tolerations)
  core.PodSpec{

args输出多个命令—/bin/bash多个命令必须要加/bin/bash -c 都需要
[root@master01 k8s-yaml]# vim nginx-pod.yaml 

apiVersion: v1
kind: Pod
metadata:
  name: centos-pod
  labels:
    app: nginx-pod
spec:
#声明容器的参数:
  containers:
  - name: centos
    image: centos:7
    args: ["/bin/bash","-c","touch /opt/123.txt; echo 123 > /opt/123.txt; sleep 3600"]
#多个命令必须要加/bin/bash
#-c输出命令的格式
#多个命令必须要加/bin/bash -c
/bin/bash多个命令必须要加/bin/bash -c 都需要
#后台休眠3600s
[root@master01 k8s-yaml]# kubectl apply -f nginx-pod.yaml --force
pod/centos-pod created
[root@master01 k8s-yaml]# kubectl get pod -o wide
NAME         READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
centos-pod   1/1     Running   0          4s    10.244.2.64   node02   <none>           <none>
[root@master01 k8s-yaml]# kubectl exec -it centos-pod bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
[root@centos-pod /]# cd /opt/
[root@centos-pod opt]# ls
123.txt
[root@centos-pod opt]# cat 123.txt 
123
command输出多个命令—/bin/bash多个命令必须要加/bin/bash -c 都需要
[root@master01 k8s-yaml]# vim nginx-pod.yaml 

apiVersion: v1
kind: Pod
metadata:
  name: centos-pod
  labels:
    app: nginx-pod
spec:
#声明容器的参数:
  containers:
  - name: centos
    image: centos:7    command: ["/bin/bash","-c","touch /opt/123.txt; echo 456 > /opt/123.txt; sleep 3600"]
#多个命令必须要加/bin/bash
#-c输出命令的格式
#多个命令必须要加/bin/bash -c
    #结果为真的时候,后台休眠3600s
#  restartPolicy: Never


[root@master01 k8s-yaml]# kubectl apply -f nginx-pod.yaml --force
[root@master01 k8s-yaml]# kubectl exec -it centos-pod bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
[root@centos-pod /]# cd /opt/
[root@centos-pod opt]# ls
123.txt
[root@centos-pod opt]# cat 123.txt 
456


command命令
[root@master01 k8s-yaml]# vim nginx-pod.yaml 

apiVersion: v1
kind: Pod
metadata:
  name: centos-pod
  labels:
    app: nginx-pod
spec:
#声明容器的参数:
  containers:
  - name: centos
    image: centos:7
    command: ["touch /opt/123.txt; echo 456 > /opt/123.txt; sleep 3600"]
#多个命令必须要加/bin/bash
#-c输出命令的格式
#多个命令必须要加/bin/bash -c
    #结果为真的时候,后台休眠3600s
[root@master01 k8s-yaml]# vim nginx-pod.yaml 

apiVersion: v1
kind: Pod
metadata:
  name: centos-pod
  labels:
    app: nginx-pod
spec:
#声明容器的参数:
  containers:
  - name: centos
    image: centos:7
    command: ["touch /opt/123.txt; echo 456 > /opt/123.txt; sleep 3600"]
#多个命令必须要加/bin/bash
#-c输出命令的格式
#多个命令必须要加/bin/bash -c
    #结果为真的时候,后台休眠3600s

以上不能执行
[root@master01 k8s-yaml]# kubectl apply -f nginx-pod.yaml --force
pod/centos-pod configured
[root@master01 k8s-yaml]# kubectl exec -it centos-pod bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
error: unable to upgrade connection: container not found ("centos")

command args混合使用就是传参
[root@master01 k8s-yaml]# vim nginx-pod.yaml 

apiVersion: v1
kind: Pod
metadata:
  name: centos-pod
  labels:
    app: nginx-pod
spec:
#声明容器的参数:
  containers:
  - name: centos
    image: centos:7
    command: ["echo"]
    args: ["hello world"]


[root@master01 k8s-yaml]# kubectl apply -f nginx-pod.yaml --force
pod/centos-pod configured
[root@master01 k8s-yaml]# kubectl describe pod centos-pod 
[root@master01 k8s-yaml]# kubectl logs -f centos-pod 
hello world


nginx—command args混合使用就是传参
[root@master01 k8s-yaml]# vim nginx-pod.yaml 

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx-pod
spec:
#声明容器的参数:
  containers:
  - name: nginx
    image: nginx:1.22
    command: ["echo"]
    args: ["hello world"]
#多个命令必须要加/bin/bash
#-c输出命令的格式
#多个命令必须要加/bin/bash -c
##command和args如果不需要传参只能存在一个
不论是args还是command都会覆盖容器的标准输出(CMD或者是entrypoint)


[root@master01 k8s-yaml]# kubectl apply -f nginx-pod.yaml
pod/nginx-pod created
[root@master01 k8s-yaml]# kubectl describe pod nginx-pod 



Events:
  Type     Reason     Age                From               Message
  ----     ------     ----               ----               -------
  Normal   Scheduled  16s                default-scheduler  Successfully assigned default/nginx-pod to node01
  Normal   Pulled     14s (x2 over 15s)  kubelet            Container image "nginx:1.22" already present on machine
  Normal   Created    14s (x2 over 15s)  kubelet            Created container nginx
  Normal   Started    14s (x2 over 15s)  kubelet            Started container nginx
  Warning  BackOff    12s (x2 over 13s)  kubelet            Back-off restarting failed container

[root@master01 k8s-yaml]# kubectl logs -f nginx-pod 
hello world


##CMD的命令被command: ["echo"];args: ["hello world"]覆盖

command和args如果不需要传参只能存在一个

#不论是args还是command都会覆盖容器的标准输出(CMD或者entrypoint)
OnFailure重启方式
[root@master01 k8s-yaml]# vim nginx-pod.yaml 

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx-pod
spec:
#声明容器的参数:
  containers:
  - name: nginx
    image: nginx:1.22
    command: ["echo"]
    args: ["hello world"]
#多个命令必须要加/bin/bash
#-c输出命令的格式
#多个命令必须要加/bin/bash -c
    #结果为真的时候,后台休眠3600s
  restartPolicy: OnFailure

[root@master01 k8s-yaml]# kubectl apply -f nginx-pod.yaml --force
pod/nginx-pod configured
[root@master01 k8s-yaml]# kubectl get pod
NAME         READY   STATUS             RESTARTS   AGE
centos-pod   0/1     CrashLoopBackOff   9          21m
nginx-pod    0/1     Completed          0          88s

restartPolicy: OnFailure
[root@master01 k8s-yaml]# vim nginx-pod.yaml 

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx-pod
spec:
#声明容器的参数:
  containers:
  - name: nginx
    image: nginx:1.22
    command: ["touch /ofods/123.txt;"]
#多个命令必须要加/bin/bash
#-c输出命令的格式
#多个命令必须要加/bin/bash -c
    #结果为真的时候,后台休眠3600s
  restartPolicy: OnFailure

[root@master01 k8s-yaml]# kubectl apply -f nginx-pod.yaml --force
pod/nginx-pod configured
[root@master01 k8s-yaml]# kubectl get pod
NAME         READY   STATUS             RESTARTS   AGE
centos-pod   0/1     CrashLoopBackOff   10         27m
nginx-pod    0/1     CrashLoopBackOff   1          7s

导出deployment模板
[root@master01 k8s-yaml]# kubectl create deployment nginx-de --image=nginx:1.22 --replicas=3 ##创建

[root@master01 k8s-yaml]# kubectl get deployments.apps nginx-de -o yaml > /opt/nginx-de.yaml  ##导出模板

1 k8s-yaml]# vim nginx-pod.yaml

apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx-pod
spec:
#声明容器的参数:
containers:

  • name: nginx
    image: nginx:1.22
    command: [“touch /ofods/123.txt;”]
    #多个命令必须要加/bin/bash
    #-c输出命令的格式
    #多个命令必须要加/bin/bash -c
    #结果为真的时候,后台休眠3600s
    restartPolicy: OnFailure

[root@master01 k8s-yaml]# kubectl apply -f nginx-pod.yaml --force
pod/nginx-pod configured
[root@master01 k8s-yaml]# kubectl get pod
NAME READY STATUS RESTARTS AGE
centos-pod 0/1 CrashLoopBackOff 10 27m
nginx-pod 0/1 CrashLoopBackOff 1 7s


#### 导出deployment模板

[root@master01 k8s-yaml]# kubectl create deployment nginx-de --image=nginx:1.22 --replicas=3 ##创建

[root@master01 k8s-yaml]# kubectl get deployments.apps nginx-de -o yaml > /opt/nginx-de.yaml ##导出模板

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2085535.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mysql基础练习题 577.员工奖金 (力扣)

577.编写解决方案&#xff0c;报告每个奖金 少于 1000 的员工的姓名和奖金数额。 建表插入数据&#xff1a; Create table If Not Exists Employee (empId int, name varchar(255), supervisor int, salary int) Create table If Not Exists Bonus (empId int, bonus int) Tr…

Android 查看代码行数(命令行和Statistic插件)

目录 一、命令行 1.1 使用 1.2 结果分析 二、Statistic 2.1 下载 Statistic 插件 2.2 设置 Statistic 插件 2.3 使用 Statistic 插件 相关推荐 一、命令行 find . -name "*.java" -o -name "*.kt" | xargs wc -l find .&#xff1a;从当前目录&am…

基于Material Design风格开源的Avalonia UI控件库

前言 今天大姚给大家分享一款基于Material Design风格开源、免费&#xff08;MIT License&#xff09;的Avalonia UI控件库&#xff1a;Material.Avalonia。 当前项目还处于alpha阶段。 Avalonia介绍 Avalonia是一个强大的框架&#xff0c;使开发人员能够使用.NET创建跨平台应…

Prometheus(七):自动发现服务consule

目录 1 consule配置使用1.1 Prometheus 支持的多种服务发现机制1.2 安装1、基于 docker 的 consul 集群 - docker-compose2、单节点cosule安装-docker安装 1.3 使用1、使用接口注册服务2、配置 Prometheus 对接Consul 实现自动服务发现3、使用接口注册服务2-JSON文件4、relabel…

【微信小程序】全局数据共享 - MobX

1. 什么是全局数据共享 2. 小程序中的全局数据共享方案 3.Mobx的使用 1.npm init -y(根据实际情况选择) 在小程序项目中&#xff0c;可以通过 npm 的方式引入 MobX 。 如果你还没有在小程序中使用过 npm &#xff0c;那先在小程序目录中执行命令&#xff1a; npm init -y2. …

从“输血“到“造血“:“拨改投“政策如何推动产业升级?

在经济发展的浪潮中&#xff0c;“拨改投”政策如同一股清流&#xff0c;以创新之姿重塑了财政资金的传统使用模式。这一政策精髓在于&#xff0c;将财政资金从直接的拨款方式转变为灵活的股权投资方式&#xff0c;不仅激活了市场活力&#xff0c;更引领了产业升级的新风尚。 “…

Windows 10/11降级漏洞的工具包现已发布 仅供安全测试

早前有研究人员在分析 Windows 10/11 更新机制时发现微软虽然已经考虑到潜在的安全问题增加了各种限制&#xff0c;但还是存在失误因此存在弱点&#xff0c;研究人员则通过该弱点成功降级了系统。通过该漏洞不仅可以成功降级系统&#xff0c;同时系统还会认为自己已经完成更新并…

高级算法设计与分析 学习笔记1 递归与分治法 复杂度计算 大数乘法

本章的目录&#xff1a; 排序问题的示例与分析&#xff1a;递归与分治 插入排序&#xff1a; 类似于排序扑克牌。先把第一个元素当成已排序序列&#xff0c;然后把第二个纳入&#xff0c;用一次插入排序&#xff0c;然后将第三个纳入…… 插入排序性能分析 大O表示上界&#x…

云微客一分钟告诉你,为什么要做短视频矩阵?

都说2024年是经济下行的一年&#xff0c;但是要问2024年的营销关键词是什么的话&#xff0c;那一定是&#xff1a;短视频矩阵。短视频矩阵就是在多个短视频平台上建立多个账号&#xff0c;通过矩阵系统发布不同类型的短视频内容&#xff0c;实现品牌曝光、用户引流、粉丝积累等…

探索AI智能问答:改变未来交流的新动力

随着大数据和机器学习的发展&#xff0c;AI智能问答系统已经不仅仅是科幻小说中的幻想&#xff0c;而是正逐步融入我们的日常生活&#xff0c;从客户服务到教育&#xff0c;再到医疗诊断&#xff0c;其应用范围如此之广&#xff0c;让人叹为观止。 一、AI智能问答系统的原理与运…

关于武汉芯景科技有限公司的实时时钟芯片XJ8337开发指南(兼容DS1337)

一、芯片引脚介绍 1.芯片引脚 2.引脚描述 二、系统结构图 三、功能描述 1.时钟功能 2.闹钟功能&#xff08;两个闹钟&#xff09; 3.振荡器停止控制 4.频率输出&#xff08;1HZ、1.096KHZ、8.192KHZ、32.768KHZ&#xff09; 5.振荡器停止检测 6.闹钟中断标志 四、程序代…

AI模型应该追求全能还是专精

目录 1.概述 2.AI模型的全面评估和比较 2.1. 精度 (Accuracy) 2.2. 速度 (Speed) 2.3. 鲁棒性 (Robustness) 2.4. 可扩展性 (Scalability) 2.5. 解释性/可解释性 (Interpretability) 2.6.应用场景分析 3.AI模型的专精化和可扩展性 3.1. 模型构架选择 3.2. 训练策略 …

sheng的学习笔记-AI-图半监督学习

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 半监督学习&#xff1a;sheng的学习笔记-AI-半监督学习-CSDN博客 什么是图半监督学习 给定一个数据集&#xff0c;我们可将其映射为一个图&#xff0c;数据集中每个样本对应于图中一个结点&#xff0c;若两个样本之间的相…

mysql的组从复制

1.原理分析 三个线程 1.实际上主从同步的原理就是基于 binlog 进行数据同步的。在主从复制过程中&#xff0c;会基于 3 个线程来操作&#xff0c; 一个主库线程&#xff0c;两个从库线程。 2.二进制日志转储线程&#xff08; Binlog dump thread &#xff09;是一个主库线程…

神仙级的免费开源电子书阅读器,还支持听书功能,极空间部署『Koodo Reader』

神仙级的免费开源电子书阅读器&#xff0c;还支持听书功能&#xff0c;极空间部署『Koodo Reader』 哈喽小伙伴们好&#xff0c;我是Stark-C~ 前段时间不是给大家分享的电子书管理工具『TaleBook』嘛~&#xff0c;然后就有粉丝私信我有没有那种专门看电子书的阅读器&#xff…

Qt上传文件小记

最近由于公司上线了云平台&#xff0c;需要用Qt与云平台进行对接&#xff0c;故拾起了network模块。 众所周知Qt网络http相关的类QNetworkAccessManager发挥着举足轻重的作用。 普通的http&#xff1a;GET POST PUT DELETE已经耳熟能详&#xff0c;网上也有很多的文章有介绍到…

如何限制企业内部文件外发?告别文件泄露,七大招数限制企业内部文件外发!

如何限制企业内部文件外发&#xff0c;告别文件泄露&#xff01;文件一旦外泄&#xff0c;不仅可能泄露商业机密&#xff0c;还可能对企业的声誉和利益造成重大损害。 因此&#xff0c;如何有效限制企业内部文件外发&#xff0c;成为了每个企业必须面对和解决的问题。以下七大…

Vue 3 CLI TypeScript 项目搭建全攻略

一、前期准备 在搭建 Vue 3 CLI TypeScript 项目之前&#xff0c;我们需要做好一系列的准备工作。 首先&#xff0c;Node.js 是必不可少的运行环境。Vue 3 CLI 要求 Node.js 的版本至少为 8.9 以上。您可以从Node.js 官方网站下载最新的长期支持&#xff08;LTS&#xff09;版…

数字芯片设计验证经验分享系列文章(第四部分):将ASIC IP核移植到FPGA上——如何测试IP核的功能和考虑纯电路以外的其他因素

作者&#xff1a;Philipp Jacobsohn&#xff0c;SmartDV首席应用工程师 Sunil Kumar&#xff0c;SmartDV FPGA设计总监 本系列文章从数字芯片设计项目技术总监的角度出发&#xff0c;介绍了如何将芯片的产品定义与设计和验证规划进行结合&#xff0c;详细讲述了在FPGA上使用I…

Python中类型转换函数1

1 bool()函数 bool()函数的作用是将给定参数转换为布尔类型&#xff0c;指定参数是非零值&#xff0c;则转换为True&#xff0c;否则转换为False&#xff0c;如图1所示。 图1 bool()函数的使用方法1 如果bool()函数没有参数&#xff0c;则返回值是False&#xff0c;如图2所示…