美文网首页Kubernets
kuberntes - pod初始化及静态pod创建

kuberntes - pod初始化及静态pod创建

作者: 条子在洗澡 | 来源:发表于2019-04-03 05:54 被阅读18次

    初始化容器

    #pod中有多个容器,容器a,依赖容器b,c,d, 需要b,c,d容器启动后,a容器才可以启动,其中有一个容器启动失败则pod启动失败,按规则进行重启
    
    规则:
    1、它们总是运行到完成。
    2、每个都必须在下一个启动之前成功完成。
    3、如果 Pod 的 Init 容器失败,Kubernetes 会不断地重启该 Pod,直到 Init 容器成功为止。然而,如果 Pod 对应的
    restartPolicy 为 Never,它不会重新启动。
    4、Init 容器支持应用容器的全部字段和特性,但不支持 Readiness Probe,因为它们必须在 Pod 就绪之前运行完
    成。
    5、如果为一个 Pod 指定了多个 Init 容器,那些容器会按顺序一次运行一个。 每个 Init 容器必须运行成功,下一个
    才能够运行。
    6、因为 Init 容器可能会被重启、重试或者重新执行,所以 Init 容器的代码应该是幂等的。 特别地,被写到
    EmptyDirs 中文件的代码,应该对输出文件可能已经存在做好准备。
    7、在 Pod 上使用 activeDeadlineSeconds,在容器上使用 livenessProbe,这样能够避免 Init 容器一直失败。 这就
    为 Init 容器活跃设置了一个期限。
    8、在 Pod 中的每个 app 和 Init 容器的名称必须唯一;与任何其它容器共享同一个名称,会在验证时抛出错误。
    9、对 Init 容器 spec 的修改,被限制在容器 image 字段中。 更改 Init 容器的 image 字段,等价于重启该 Pod
    
    #举个例子,第一个容器创建了/xx文件夹,第二个容器在/xx中创建aa.txt文件:
    #详细请见:https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
    
    apiVersion: v1
    kind: Pod
    metadata:
      name: myapp-pod
      labels:
        app: myapp
    spec:
      volumes:
      - name: workdir
        emptyDir: {}
      containers:
      - name: myapp-container
        image: nginx
        volumeMounts:
        - name: workdir
          mountPath: "/xx"
      initContainers:
      - name: init-poda
        image: busybox
        command: ['sh', '-c', 'touch /work-dir/aa.txt']
        volumeMounts:
        - name: workdir
          mountPath: "/work-dir"
    
    

    静态pod

    #静态pod就是,不是master上创建的,而是需要到Node的/etc/kubelet.d/里创建一个yaml文件,然后根据这个yaml文件,创建一个pod,这样创建出来的node,是不会接受master的管理的。
    
    #创建静态pod的yaml存放目录
    mkdir /etc/static-pod
    
    #查看kubelet启动脚本目录,找到 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
    systemctl status kubelet -l
    
    vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf  #添加参数 --pod-manifest-path
    Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --pod-manifest-path=/etc/static-pod"
    
    #创建静态pod的yaml文件
    touch /etc/static-pod/static-pod.yaml
    vim /etc/static-pod/static-pod.yaml
    
    apiVersion: v1
    kind: Pod
    metadata:
      name: static-web
      labels:
        role: myrole
    spec:
      containers: 
      - name: web
        image: nginx
        ports: 
        - name: web
          containerPort: 80
          protocol: TCP
    
    
    #重启服务
    systemctl daemon-reload 
    
    
    
    
    

    相关文章

      网友评论

        本文标题:kuberntes - pod初始化及静态pod创建

        本文链接:https://www.haomeiwen.com/subject/zbgvbqtx.html