云原生之kuberneteskubernetes集群下初始化容器的使用方法(代码片段)

江湖有缘 江湖有缘     2023-03-14     594

关键词:

【云原生之kubernetes】kubernetes集群下初始化容器的使用方法

一、初始化容器介绍

1.初始化容器简介

Kubernetes 中 Init 容器,也叫做初始化容器,是 K8s 官方为我们提供的一个 可以用来判断我们的环境是否已经满足运行 Pod 应用前所需要的条件。

2.初始化容器特点

1.初始化容器用于帮助主容器执行初始化,它会先与主容器启动.
2.初始化容器可以有多个,这些初始化容器时顺序执行的,任意一个初始化容器执行失败,则整个pod退出。
3.初始化容器的任务不是长时任务,初始化容器任务执行完毕,且正常退出,主容器才会启动。

二、检查本地集群状态

1.检查工作节点状态

[root@k8s-master ~]# kubectl get nodes -owide
NAME         STATUS   ROLES                  AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION          CONTAINER-RUNTIME
k8s-master   Ready    control-plane,master   16d   v1.23.1   192.168.3.201   <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   containerd://1.6.6
k8s-node01   Ready    <none>                 16d   v1.23.1   192.168.3.202   <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   containerd://1.6.6
k8s-node02   Ready    <none>                 16d   v1.23.1   192.168.3.203   <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   containerd://1.6.6

2.检查系统pod状态

[root@k8s-master ~]# kubectl get pods -A
NAMESPACE     NAME                                       READY   STATUS    RESTARTS        AGE
default       nfs-client-provisioner-779b7f4dfd-tgmmc    1/1     Running   94 (5m4s ago)   30h
kube-system   calico-kube-controllers-7bc6547ffb-2nf66   1/1     Running   2 (3d6h ago)    16d
kube-system   calico-node-8c4pn                          0/1     Running   2 (3d6h ago)    16d
kube-system   calico-node-f28qq                          1/1     Running   2 (3d6h ago)    16d
kube-system   calico-node-wmc2j                          1/1     Running   2 (3d6h ago)    16d
kube-system   coredns-6d8c4cb4d-6gm4x                    1/1     Running   2 (3d6h ago)    16d
kube-system   coredns-6d8c4cb4d-7vxlz                    1/1     Running   2 (3d6h ago)    16d
kube-system   etcd-k8s-master                            1/1     Running   2 (3d6h ago)    16d
kube-system   kube-apiserver-k8s-master                  1/1     Running   2 (3d6h ago)    16d
kube-system   kube-controller-manager-k8s-master         1/1     Running   2 (3d6h ago)    16d
kube-system   kube-proxy-8dfw8                           1/1     Running   2 (3d6h ago)    16d
kube-system   kube-proxy-ghzrv                           1/1     Running   2 (3d6h ago)    16d
kube-system   kube-proxy-j867z                           1/1     Running   2 (3d6h ago)    16d
kube-system   kube-scheduler-k8s-master                  1/1     Running   2 (3d6h ago)    16d

三、运行一个初始化容器的pod

1.编辑web_init.yaml 文件

[root@k8s-master init]# cat web_init.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: web01   
spec:      
  restartPolicy: Always      #容器重启策略,Always总是重启,这是默认策略,OnFailure当pod异常退出时,则自动重启;Never不要重启
  dnsPolicy: Default
  volumes:
  - name: rootdir
#   hostPath:
#       path: /data/nginx
    emptyDir:
  - name: localtime
    hostPath:  #挂载宿主机本地目录
       path: /etc/localtime   
  initContainers:
  - name: busybox01
    image: busybox:1.28
    volumeMounts:
    - name: rootdir
      mountPath: /data/index/html
    command:
      - /bin/sh
      - -c
      - "echo 'hello world' > /data/index/html/index.html"
  containers:
  - name: busybox02
    image: busybox:1.28
    imagePullPolicy:  IfNotPresent   
    volumeMounts:
 #  - name: rootdir
 #    mountPath: /usr/share/nginx/html
    - name: localtime
      mountPath: /etc/localtime
      readOnly: true    #只读挂载
    env: 
    - name: test
      value: "123" 
    command:
    - /bin/sh
    - -c
    args:        #向Cmd传递参数
    - "sleep 3600"                
  - image: nginx:1.21  
    name: nginxtest   
    imagePullPolicy:  IfNotPresent   
    env:  
    - name: MYSQL_HOST
      value: "192.169.0.1"
    - name: MYSQL_PORT
      value: "3306"
    volumeMounts:
    - name: rootdir
      mountPath: /usr/share/nginx/html
    - name: localtime
      mountPath: /etc/localtime    
 #   command:
 #   - /bin/bash
 #   - -c
 #   args:        #向Cmd传递参数
 #   - "sleep 3600"                           
    ports:            #容器端口情况
    - name: http
      protocol: TCP
      containerPort: 80
      hostPort: 8080
 #  dnsPolicy: Default

2.运行pod

[root@k8s-master init]# kubectl apply -f web_init.yaml 

3.检查pod状态

[root@k8s-master init]# kubectl get pods
NAME    READY   STATUS     RESTARTS   AGE
web01   0/2     Init:0/1   0          11s
[root@k8s-master init]# kubectl get pods
NAME    READY   STATUS    RESTARTS   AGE
web01   2/2     Running   0          2m

四、测试初始化容器效果

1.查看pod的ip信息

[root@k8s-master ~]# kubectl get pods -owide
NAME        READY   STATUS    RESTARTS   AGE     IP              NODE         NOMINATED NODE   READINESS GATES
busybox03   1/1     Running   0          3m53s   10.244.85.202   k8s-node01   <none>           <none>
web01       2/2     Running   0          15m     10.244.58.209   k8s-node02   <none>           <none>

2.访问web内容

[root@k8s-master init]# kubectl exec -it web01 -c nginxtest -- /bin/bash
root@web01:/# curl 10.244.58.209
hello world

五、查看pod详细信息

[root@k8s-master ~]# kubectl  describe pod web01 
Name:         web01
Namespace:    default
Priority:     0
Node:         k8s-node02/192.168.3.203
Start Time:   Tue, 19 Jul 2022 17:46:07 +0800
Labels:       <none>
Annotations:  cni.projectcalico.org/containerID: 732320f6a7ffe9c7039b2b27de69c8773ecee304d2a20f98a4e9d243dfb7c8fc
              cni.projectcalico.org/podIP: 10.244.58.209/32
              cni.projectcalico.org/podIPs: 10.244.58.209/32
Status:       Running
IP:           10.244.58.209
IPs:
  IP:  10.244.58.209
Init Containers:
  busybox01:
    Container ID:  containerd://e6d9f1432c63a13271ce9d38f5d63c1fdefbadf0800fa1668c7059d9eaa7fc33
    Image:         busybox:1.28
    Image ID:      docker.io/library/busybox@sha256:141c253bc4c3fd0a201d32dc1f493bcf3fff003b6df416dea4f41046e0f37d47
    Port:          <none>
    Host Port:     <none>
    Command:
      /bin/sh
      -c
      echo 'hello world' > /data/index/html/index.html
    State:          Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Tue, 19 Jul 2022 17:46:25 +0800
      Finished:     Tue, 19 Jul 2022 17:46:25 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /data/index/html from rootdir (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-wzw77 (ro)
Containers:
  busybox02:
    Container ID:  containerd://104d483e7b9a3af176d7c9deb9c5c7da29215bd6a207317531f62f85fe5315bf
    Image:         busybox:1.28
    Image ID:      docker.io/library/busybox@sha256:141c253bc4c3fd0a201d32dc1f493bcf3fff003b6df416dea4f41046e0f37d47
    Port:          <none>
    Host Port:     <none>
    Command:
      /bin/sh
      -c
    Args:
      sleep 3600
    State:          Running
      Started:      Tue, 19 Jul 2022 17:46:25 +0800
    Ready:          True
    Restart Count:  0
    Environment:
      test:  123
    Mounts:
      /etc/localtime from localtime (ro)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-wzw77 (ro)
  nginxtest:
    Container ID:   containerd://2315c27ba2e0676bbb1e7ca0db764e96ca40af3f573ec1b536994f577332c911
    Image:          nginx:1.21
    Image ID:       docker.io/library/nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
    Port:           80/TCP
    Host Port:      8080/TCP
    State:          Running
      Started:      Tue, 19 Jul 2022 17:46:36 +0800
    Ready:          True
    Restart Count:  0
    Environment:
      MYSQL_HOST:  192.169.0.1
      MYSQL_PORT:  3306
    Mounts:
      /etc/localtime from localtime (rw)
      /usr/share/nginx/html from rootdir (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-wzw77 (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  rootdir:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:     
    SizeLimit:  <unset>
  localtime:
    Type:          HostPath (bare host directory volume)
    Path:          /etc/localtime
    HostPathType:  
  kube-api-access-wzw77:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Pulling    53m   kubelet            Pulling image "busybox:1.28"
  Normal  Scheduled  53m   default-scheduler  Successfully assigned default/web01 to k8s-node02
  Normal  Pulled     53m   kubelet            Successfully pulled image "busybox:1.28" in 17.313491259s
  Normal  Created    53m   kubelet            Created container busybox01
  Normal  Started    53m   kubelet            Started container busybox01
  Normal  Pulled     53m   kubelet            Container image "busybox:1.28" already present on machine
  Normal  Created    53m   kubelet            Created container busybox02
  Normal  Started    53m   kubelet            Started container busybox02
  Normal  Pulling    53m   kubelet            Pulling image "nginx:1.21"
  Normal  Pulled     53m   kubelet            Successfully pulled image "nginx:1.21" in 10.067013987s
  Normal  Created    53m   kubelet            Created container nginxtest
  Normal  Started    53m   kubelet            Started container nginxtest

六、查看pod日志信息

[root@k8s-master ~]# kubectl logs web01 busybox01
[root@k8s-master ~]# kubectl logs web01 busybox02
[root@k8s-master ~]# kubectl logs web01 nginxtest 
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2022/07/19 17:46:36 [notice] 1#1: using the "epoll" event method
2022/07/19 17:46:36 [notice] 1#1: nginx/1.21.5
2022/07/19 17:46:36 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6) 
2022/07/19 17:46:36 [notice] 1#1: OS: Linux 3.10.0-957.el7.x86_64
2022/07/19 17:46:36 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 65536:65536
2022/07/19 17:46:36 [notice] 1#1: start worker processes
2022/07/19 17:46:36 [notice] 1#1: start worker process 31
2022/07/19 17:46:36 [notice] 1#1: start worker process 32
10.244.58.209 - - [19/Jul/2022:18:09:17 +0800] "GET / HTTP/1.1" 200 12 "-" "curl/7.74.0" "-"

云原生之kuberneteskubernetes集群下的健康检查使用方法

【云原生之kubernetes】kubernetes集群下的健康检查使用方法一、k8s健康检查介绍1.k8s健康检查简介2..k8s健康检查作用二、检查本地kubernetes集群状态1.检查工作节点状态2.检查系统pod状态三、健康检查探针的类型四、容器健康检查的时... 查看详情

云原生之kuberneteskubernetes集群下初始化容器的使用方法(代码片段)

【云原生之kubernetes】kubernetes集群下初始化容器的使用方法一、初始化容器介绍1.初始化容器简介2.初始化容器特点二、检查本地集群状态1.检查工作节点状态2.检查系统pod状态三、运行一个初始化容器的pod1.编辑web_init.yaml文件2.运... 查看详情

云原生:云计算时代命题之终极解决方案

云原生:云计算时代命题之终极解决方案https://blog.csdn.net/broadview2006/article/details/80131068 2017年08月17日14:35:05  CloudNative?云原生?很多人一看到这个词就懵了,到底什么是云原生?  云原生这个词其实由来已久,IT行... 查看详情

云原生系列之使用prometheus监控redis集群实战

...监控redis的某一个单机服务,可以参考:超级实用,解密云原生监控技术,使用prometheus轻松搞定redis监控本文中的是prometheus已经安装好,如果你还未安装,可以参考上一篇文章:prometheus安装及使用入门若你想监控其他服务可以参... 查看详情

《云原生入门级开发者认证》学习笔记之云原生基础设施之kubernetes(代码片段)

...原因:虽然考了CKA,了解了一些K8s相关的知识但是对云原生整个体系一直都很模糊希望对云原生有一个基本的认识通过学习实现云原生相关入门博文主要内容涉及:关于云原生基础设施的简述,主要为K8s,适合温习,初学... 查看详情

《云原生入门级开发者认证》学习笔记之云原生基础设施之容器技术(代码片段)

...原因:虽然考了CKA,了解了一些K8s相关的知识但是对云原生整个体系一直都很模糊希望对云原生有一个基本的认识通过学习实现云原生相关入门博文主要内容涉及:关于Docker知识体系的简述,适合温习讲的很浅,都... 查看详情

云原生系统之弹性模式

... 责编|晋兆雨出品|CSDN(ID:CSDNnews)大纲1.云原生系统的弹性模式resiliencypattern   1.1服务故障的雪崩效应   1.2回应之前云原生--弹性请求的疑问?2.弹性模式:作用在下游请求消息上3.短期中断的响应码4.Polly... 查看详情

猿创征文|云原生领域之容器日常使用工具推荐(代码片段)

猿创征文|云原生领域之容器日常使用工具推荐一、云原生介绍1.云原生定义2.容器技术简介3.云原生相关工具导航二、Docker1.Docker介绍①Docker简介②Docker特点③Docker的三个基本概念④Docker的架构图2.Docker的优势3.Docker的使用效果①... 查看详情

云原生核心技术之——kubernetes(代码片段)

...发人员、运维人员的噩梦。前面的篇章已经总体介绍了云原生技术体系,体系中的‘微服务’、‘容器’技术,今天给大家介绍的便是云原生技术体系中的‘容器编排引擎——Kubernetes’。回顾:::hljs-center图云原生核心技术:::微服... 查看详情

云原生之kubernetes实战安装kubeopertor教程

【云原生之kubernetes实战】部署kubeopertor教程一、kubeopertor介绍1.kubeopertor简介2.kubeopertor特点二、检查本地Docker状态三、kubeopertor系统架构四、kubeopertor最小配置要求五、初始环境配置1.关闭swap2.关闭防火墙3.关闭selinux六、安装kubeoper... 查看详情

云原生|docker篇之轻松学会原理|架构|安装|加速

活动地址: 开发云-一站式云服务平台文章目录前言一、Docker架构二、Docker隔离原理三、Docker安装 查看详情

云原生|docker篇之轻松学会原理|架构|安装|加速

活动地址: 开发云-一站式云服务平台文章目录前言一、Docker架构二、Docker隔离原理三、Docker安装 查看详情

云原生之docker实战使用docker部署kodbox私有云

【云原生之Docker实战】使用docker部署kodbox私有云一、kodbox介绍1.kodbox简介2.kodbox功能与特点二、检查本地docker状态1.检查docker版本2.检查docker状态三、安装kodbox1.创建安装目录2.编辑docker-compose.yaml脚本3.创建相关容器4.查看容器状态... 查看详情

云原生之dockerdocker的网络管理

【云原生之Docker】Docker的网络管理一、bridge网络1.bridge网络介绍2.bridge网络使用场景3.查看bridge网络详细信息4.运行bridge网络的容器5.查看容器网络二、host网络1.host网络介绍2.host网络使用场景3.host网络详细信息4.运行host网络容器5.... 查看详情

云原生系统之弹性模式(代码片段)

大纲1.云原生系统的弹性模式resiliencypattern  1.1服务故障的雪崩效应  1.2回应之前云原生--弹性请求的疑问?2. 弹性模式:作用在下游请求消息上3. 短期中断的响应码4. Polly经典策略5.  Golang断路器模式德国哲学家尼采... 查看详情

云原生之docker实战使用docker部署cloudreve公有云文件系统

【云原生之Docker实战】使用Docker部署Cloudreve公有云文件系统一、Cloudreve介绍1.Cloudreve简介2.Cloudreve特点二、检查本地docker环境1.检查docker服务状态2.检查docker配置信息3.开启IPv4forwarding4.检查Docker版本三、检查宿主机系统版本四、安... 查看详情

云原生之docker实战部署轻量级容器云管理平台humpback

【云原生之Docker实战】部署轻量级容器云管理平台Humpback一、Humpback介绍1.Humpback简介2.Humpback特点二、检查docker环境1.检查docker状态2.检查docker版本三、安装docker-compose1.下载docker-compose二进制包2.给文件增加执行权限3.检查docker-compos... 查看详情

云原生架构重要组成部分之微服务(代码片段)

...了该技术架构,随着技术与理念的升级迭代,云原生概念应世而起,现在火的一塌糊涂。做为新时代的程序员,我们要抓住云原生的浪潮。这篇文章呢大致分为四部分,第一部分简单谈一下什么是云原生,... 查看详情