美文网首页
备战CKA每日一题——第3天

备战CKA每日一题——第3天

作者: 小E的私房菜 | 来源:发表于2020-03-09 17:55 被阅读0次

    第2题:Init Container:


    定义:
    • Pod中运行于应用程序容器之前的专用容器

    了解初始化容器:

    一个Pod可以有多个运行应用程序的容器,但也可以有一个或多个初始化容器,它们在启动应用程序容器之前就已运行.初始化容器与常规容器完全一样,除了:

    • 初始化容器始终会运行到完成状态
    • 每个init容器必须成功完成才能启动下一个容器
      要为Pod指定初始化容器,请将initContainers字段添加到Pod规范中,作为类型为Container的对象的数组添加到 app containers数组旁边。初始化容器的状态.status.initContainerStatuses 作为容器状态的数组在字段中返回(类似于该.status.containerStatuses 字段)。

    具体可参考:https://kubernetes.io/docs/concepts/workloads/pods/init-containers/


    与常规容器的区别:
    • 初始化容器支持应用容器的所有字段和功能,包括资源限制,卷和安全设置。然而,对于起始容器的资源请求,并限制有不同的处理,如中记录资源

    • 另外,初始化容器不支持就绪探针,因为它们必须运行到Pod就绪才能完成。

    • 如果您为Pod指定多个初始化容器,则Kubelet会依次运行每个初始化容器。每个初始化容器必须成功,然后才能运行下一个容器。当所有初始化容器都运行完毕后,Kubelet会初始化Pod的应用程序容器并像往常一样运行它们


    举例:
    apiVersion: v1
    kind: Pod
    metadata:
      name: myapp-pod
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp-container
        image: busybox:1.28
        command: ['sh', '-c', 'echo The app is running! && sleep 3600']
      initContainers:
      - name: init-myservice
        image: busybox:1.28
        command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
      - name: init-mydb
        image: busybox:1.28
        command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']
    

    可以运行以下指令启动该pod:

    sudo kubectl apply -f initContainer.yaml
    

    此时,这些init容器将等待发现名为mydb和myservice的服务 。我们就需要创建该服务:

    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: myservice
    spec:
      ports:
      - protocol: TCP
        port: 80
        targetPort: 9376
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: mydb
    spec:
      ports:
      - protocol: TCP
        port: 80
        targetPort: 9377
    

    可以运行以下指令启动该服务:

    sudo kubectl apply -f initContainerService.yaml
    

    最后我们可以看到,pod已经为完全启动:


    image.png

    我们来看下pod内部:

     sudo kubectl describe pod myapp-pod -n ns-ehj
    
    Name:         myapp-pod
    Namespace:    ns-ehj
    Priority:     0
    Node:         p-109-123-122-12/109.123.122.12
    Start Time:   Tue, 10 Mar 2020 01:36:59 +0800
    Labels:       run=myapp-pod
    Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                    {"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{},"creationTimestamp":null,"labels":{"run":"myapp-pod"},"name":"myapp-pod","nam...
    Status:       Running
    IP:           10.244.1.23
    IPs:
      IP:  10.244.1.23
    Init Containers:
      init-myservice:
        Container ID:  docker://7f0c53e8569ca159bd3de8e415312f1f4f09a3c44e9e9b78beb32649fb94fc09
        Image:         busybox:1.28
        Image ID:      docker-pullable://busybox@sha256:141c253bc4c3fd0a201d32dc1f493bcf3fff003b6df416dea4f41046e0f37d47
        Port:          <none>
        Host Port:     <none>
        Command:
          sh
          -c
          until nslookup myservice; do echo waiting for myservice; sleep 2; done;
        State:          Terminated
          Reason:       Completed
          Exit Code:    0
          Started:      Tue, 10 Mar 2020 01:37:12 +0800
          Finished:     Tue, 10 Mar 2020 01:46:07 +0800
        Ready:          True
        Restart Count:  0
        Environment:    <none>
        Mounts:
          /var/run/secrets/kubernetes.io/serviceaccount from default-token-hfgl7 (ro)
      init-mydb:
        Container ID:  docker://8a35d51bc279f7e38e728767962c9c35a1a8a7fc9444fa3a069f79d55eb32efd
        Image:         busybox:1.28
        Image ID:      docker-pullable://busybox@sha256:141c253bc4c3fd0a201d32dc1f493bcf3fff003b6df416dea4f41046e0f37d47
        Port:          <none>
        Host Port:     <none>
        Command:
          sh
          -c
          until nslookup mydb; do echo waiting for mydb; sleep 2; done;
        State:          Terminated
          Reason:       Completed
          Exit Code:    0
          Started:      Tue, 10 Mar 2020 01:46:08 +0800
          Finished:     Tue, 10 Mar 2020 01:46:08 +0800
        Ready:          True
        Restart Count:  0
        Environment:    <none>
        Mounts:
          /var/run/secrets/kubernetes.io/serviceaccount from default-token-hfgl7 (ro)
    Containers:
      myapp-container:
        Container ID:  docker://88470fe67d075866a14aef0b6e8ec566808fb711043e6ba1941af9a59e39fb73
        Image:         busybox:1.28
        Image ID:      docker-pullable://busybox@sha256:141c253bc4c3fd0a201d32dc1f493bcf3fff003b6df416dea4f41046e0f37d47
        Port:          <none>
        Host Port:     <none>
        Command:
          sh
          -c
          echo The app is running! && sleep 3600
        State:          Running
          Started:      Tue, 10 Mar 2020 01:46:09 +0800
        Ready:          True
        Restart Count:  0
        Environment:    <none>
        Mounts:
          /var/run/secrets/kubernetes.io/serviceaccount from default-token-hfgl7 (ro)
    Conditions:
      Type              Status
      Initialized       True 
      Ready             True 
      ContainersReady   True 
      PodScheduled      True 
    Volumes:
      default-token-hfgl7:
        Type:        Secret (a volume populated by a Secret)
        SecretName:  default-token-hfgl7
        Optional:    false
    QoS Class:       BestEffort
    Node-Selectors:  <none>
    Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                     node.kubernetes.io/unreachable:NoExecute for 300s
    Events:
      Type    Reason     Age        From                       Message
      ----    ------     ----       ----                       -------
      Normal  Scheduled  22m        default-scheduler          Successfully assigned ns-ehj/myapp-pod to p-109-123-122-12
      Normal  Pulling    <invalid>  kubelet, p-109-123-122-12  Pulling image "busybox:1.28"
      Normal  Pulled     <invalid>  kubelet, p-109-123-122-12  Successfully pulled image "busybox:1.28"
      Normal  Created    <invalid>  kubelet, p-109-123-122-12  Created container init-myservice
      Normal  Started    <invalid>  kubelet, p-109-123-122-12  Started container init-myservice
      Normal  Pulled     <invalid>  kubelet, p-109-123-122-12  Container image "busybox:1.28" already present on machine
      Normal  Created    <invalid>  kubelet, p-109-123-122-12  Created container init-mydb
      Normal  Started    <invalid>  kubelet, p-109-123-122-12  Started container init-mydb
      Normal  Pulled     <invalid>  kubelet, p-109-123-122-12  Container image "busybox:1.28" already present on machine
      Normal  Created    <invalid>  kubelet, p-109-123-122-12  Created container myapp-container
      Normal  Started    <invalid>  kubelet, p-109-123-122-12  Started container myapp-container
    

    相关文章

      网友评论

          本文标题:备战CKA每日一题——第3天

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