学无先后,达者为师

网站首页 编程语言 正文

Pod创建多个容器并访问指定容器

作者:她丶如月中来 更新时间: 2022-07-18 编程语言

Pod创建多个容器并访问指定容器


本文章案例是采用helm提供的模板来管理kubernates,如果您想了解helm,您可以访问helm docs进行了解。

文章目录

  • Pod创建多个容器并访问指定容器
  • 一、创建Deployment模板
  • 二、运行并查看Pod信息
  • 三、访问指定Pod中的某一个容器


一、创建Deployment模板

如果您对Kubernates还没有了解的话,建议您可以先访问kubernates中文文档, 否者以下内容可能让您觉得难以理解。

#版本号
apiVersion: apps/v1
#资源类型
kind: Deployment
# 源数据
metadata:
  name: {{ .Values.componentName }}
  ## 命名空间
  namespace: {{ .Values.namespace }}
  ## 标签
  labels:
    {{- include "seeker-file-server.labels" . | nindent 4 }}
spec:
  ## 副本数
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      {{- include "seeker-file-server.selectorLabels" . | nindent 6 }}
  template:
    metadata:
      {{- with .Values.podAnnotations }}
      annotations:
        {{- toYaml . | nindent 8 }}
      {{- end }}
      labels:
        {{- include "seeker-file-server.selectorLabels" . | nindent 8 }}
    spec:
      {{- with .Values.imagePullSecrets }}
      ## 镜像拉取时的认证
      imagePullSecrets:
        {{- toYaml . | nindent 8 }}
      {{- end }}
      serviceAccountName: default
      securityContext:
        {{- toYaml .Values.podSecurityContext | nindent 8 }}
      ##Pod要运行的镜像,这里可以是多个。如果您以前的没有看懂也没关系,这里才是重点。  
      containers:
          #容器名字
        - name: "file-server"
          ## file-server容器的镜像地址
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag}}
          ## 镜像拉取策略(IfNotPresent 默认值,表示宿主机上没有该镜像时才拉取。Always 表示每次创建pod时都会重新拉取镜像。Never 表示只使用本地镜像,从不主动拉取镜像。)
          imagePullPolicy: "IfNotPresent"
          ## 启动容器时的命令
          command: [ "/bin/sh","-c","/bin/sh /opt/fileServer/startup.sh"]
          ## 容器启动时的一些挂载信息
          resources:
          volumeMounts:
            - name: localtime
              mountPath: /etc/localtime
              省略......
          ## 容器启动时一些环境变量的设置    
          env:
            - name: SERVER_PORT
              value: "80"
            - name: TZ
              value: "Asia/Shanghai"
            - name: LANG
              value: "en_US.UTF-8"
              省略....
          ports:
            - name: http
            # 容器启动时的端口
              containerPort: "80"
            # 采用的协议
              protocol: TCP
         ## 创建第二个容器
        - name: nginx
          image: "{{ .Values.image.nginxRepository }}:{{ .Values.image.nginxTag }}"
          imagePullPolicy: "IfNotPresent"
          ports:
            - name: nginx
              containerPort: {{ .Values.containerPort.nginx }}
              protocol: TCP
          env:
            - name: TZ
              value: "Asia/Shanghai"
            - name: LANG
              value: "en_US.UTF-8"
          resources:
          command: [ "/bin/sh", "-c", "nginx && tail -f /dev/null" ]
      volumes: 
        - name: localtime
          hostPath:
            path: /etc/localtime
        - name: timezone
          hostPath:
            path: /etc/timezone
         省略...
      {{- with .Values.nodeSelector }}
      nodeSelector:
        {{- toYaml . | nindent 8 }}
      {{- end }}
      {{- with .Values.affinity }}
      affinity:
        {{- toYaml . | nindent 8 }}
      {{- end }}
      {{- with .Values.tolerations }}
      tolerations:
        {{- toYaml . | nindent 8 }}
      {{- end }}

以上模板其实就是创建一个deployment控制器,在containers有两个容器,一个是file-server,另一个是nginx。分别给它们挂载了一些信息和初始化一些环境变量。然后指定启动容器时的指令。

二、运行并查看Pod信息

如果只是使用k8s运行,那么就只需要使用命令kubectl create 文件名即可,如果采用helm指令,那么采用helm install 文件名
(1)查看Pod信息
kubectl get pod -n nameSpace,可以看到此时Pod在REDAY状态的已经有两个,也就是file-server和nginx容器。

(2)查看指定pod详细信息
kubectl describe pod podName -n nameSpace,比如我要查看rtm-dashboard-file-server-5c89974c9c-2mlrj的信息,我可以使用指令:kubectl describe pod rtm-dashboard-file-server-5c89974c9c-2mlrj -n shared
在这里插入图片描述

三、访问指定Pod中的某一个容器

绝大数情况下,一个pod应该只创建一个类型的容器,但是也有偶然情况。就好上面模板在一个pod中创建了两种容器,一个叫file-server,一个叫nginx,如果使用 kubectl exec -it podName -n nameSpace bash`命令进入容器,那么k8s会默认进入第一个容器。但是如果我想进入第二个容器怎么办呢?
使用指令:kubectl exec -it pod/podName -c containerName -n nameSpace bash
以刚刚创建的Pod为例,创建了两个容器,分别叫file-server和nginx。
(1)通过kubectl get pod -n nameSpace查看pod名字,看到Pod的名字叫rtm-dashboard-file-server-5c89974c9c-2mlrj
在这里插入图片描述
(2) 进入nginx容器
kubectl exec -it pod/rtm-dashboard-file-server-5c89974c9c-2mlrj -c nginx -n shared bash,可以查到已经进入了nginx这个容器。
在这里插入图片描述

(3) 进入file-server容器
kubectl exec -it pod/rtm-dashboard-file-server-5c89974c9c-2mlrj -c file-server -n shared bash

原文链接:https://blog.csdn.net/qq_43600166/article/details/124544895

栏目分类
最近更新