kubernetes(k8s)从入门到精通--通过yaml创建一个pod对象-第一章-第三节【入门篇】

一、Pod是个什么东西?

在K8S中,Pod是创建或部署的最小/最简单的基本单位,一个Pod是由多个Docker容器组成的容器组成的。pod中包含了业务容器和pause容器。其中pause容器是负责监控pod整体状态和保证pod和pod之前进行通信的“根容器”。如图:


       关于pod后面我们会详细学习,所以大概在这里只需了解一下pod的组成即可。

二、k8s pod yaml文件参数详述(可略)

apiVersion: v1                   //版本
kind: Pod                     //类型,pod
metdata:                     //元数据
name: string                   //元数据,pod的名字
namespace: string                //元数据,pod的命名空间
labels:                      //元数据,标签列表
         -  name: string               //元数据,标签的名字
annotations:                   //元数据,自定义注解列表
- name: string                   //元数据,自定义注解名字
spec:                       //pod中容器的详细定义
containers:                     //pod中的容器列表,可以有多个容器
-  name: string                   //容器的名称
images: string                   //容器中的镜像
imagesPullPolicy: [ Always | Never | IfNotPresent ]   //获取镜像的策略,默认值为Always,每次都尝试重新下载镜像
 
command: [ string ]                 //容器的启动命令列表(不配置的话使用镜像内部的命令)
args: [ string ]                   //容器参数列表
workingDir: string                  //容器的工作目录
volumeMounts:                   //挂载到容器内部的存储卷设置
-  name: string
mountPath: string                 //存储卷在容器内部Mount的绝对路径
readOnly: boolean                 //默认值为读写
ports:                       //容器需要暴露的端口号列表
- name: string
containerPort: int                  //容器要暴露的端口
hostPort: int           //容器所在主机监听的端口 (容器暴漏端口映射到宿主机的端口,设置hostPort时同一台宿主机将不能再启动该容器的第2份副本)
 
protocol: string                   //TCP和UDP,默认值为TCP
env:                       //容器运行前要设置的环境列表
- name: string
value: string
resources:
limits:                       //资源限制,容器的最大可用资源数量
cpu: string
memory: string
requeste:                     //资源限制,容器启动的初始化资源数量
cpu: string
memory: string
livenessProbe:                   //pod内容器健康检查的设置
exec:
command: [ string ]                 //exec方式需要指定的命令或脚本
httpGet:                     //通过httpget检查健康
path: string
port: number
host: string
scheme: string
httpHeaders:
- name: string
value: string
tcpSocket:                   //通过tcpSocket检查健康
port: number
initialDelaySeconds: 0               //首次检查时间
timeoutSeconds: 0               //检查超时时间
periodSeconds: 0               //检查间隔时间
successThreshold: 0
faillureThreshold: 0
securityCountext:               //安全配置
privileged: false
restartPolicy: [ Always | Never | OnFailure ]   //重启策略,默认值为Always
nodeSelector: object              //节点选择,表示将该pod调到包含这些label的Node上,以key:value格式指定
imagesPullSecrets:
- name: string
hostNetwork: false              //是否使用主机网络模式,启用Docker网桥,默认false
volumes:                   //在该pod上定义共享存储卷列表
- name: string
emptyDir: {}                 //是一种与pod同生命周期的存储卷,是一个临时的目录,内容为空
hostPath:                 //pod所在主机上的目录,将被用于容器中mount的目录
path: string
secret:                   //类型为secret的存储卷
secretName: string
item:
- key: string
path: string
configMap:                 //类型为configMap的存储卷
name: string

 


三、通过yaml创建一个pod对象

再创建yaml之前,我们引入一个新概念(kubectl expose):

kubectl expose

将资源暴露为新的Kubernetes Service。

指定deployment、service、replica setreplication controllerpod ,并使用该资源的选择器作为指定端口上新服务的选择器。deployment 或 replica set只有当其选择器可转换为service支持的选择器时,即当选择器仅包含matchLabels组件时才会作为暴露新的Service。

资源包括(不区分大小写):

pod(po),service(svc),replication controller(rc),deployment(deploy),replica set(rs)

语法

$ expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type]

示例

为RC的nginx创建service,并通过Service的80端口转发至容器的8000端口上。

kubectl expose rc nginx --port=80 --target-port=8000

由“nginx-controller.yaml”中指定的type和name标识的RC创建Service,并通过Service的80端口转发至容器的8000端口上。

kubectl expose -f nginx-controller.yaml --port=80 --target-port=8000

我们可以看到通过expose 我们可以将内部端口暴露到外部端口。与下面的配置文件其实是一样的意思:

1.配置文件

vim nginx-rc.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      name: nginx
  template:
    metadata:
      labels:
        name: nginx
    spec:
      containers:
        - name: nginx
          image: nginx
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service-nodeport
spec:
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP
  type: NodePort
  selector:
    name: nginx

2.创建

kubectl create -f nginx-rc.yaml

3.访问

输入kubectl get svc 查看映射的端口

NAME                     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes               ClusterIP   10.96.0.1       <none>        443/TCP        4d4h
nginx-service-nodeport   NodePort    10.97.108.102   <none>        80:30812/TCP   57s

其中30812就是我们要访问的端口

输入[nodeIP]或[masterIP]:30812即可访问,成功后如图:

发布了20 篇原创文章 · 获赞 0 · 访问量 3805

猜你喜欢

转载自blog.csdn.net/Laughing_G/article/details/102547246