Day04 通过配置 资源清单 构建POD

Day04 通过配置 资源清单 构建POD

一、Pods

Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元

Pod (就像在鲸鱼荚或者豌豆荚中)是一组(一个或多个) 容器; 这些容器共享存储、网络、以及怎样运行这些容器的声明。 Pod 中的内容总是并置(colocated)的并且一同调度,在共享的上下文中运行。 Pod 所建模的是特定于应用的“逻辑主机”,其中包含一个或多个应用容器, 这些容器是相对紧密的耦合在一起的。 在非云环境中,在相同的物理机或虚拟机上运行的应用类似于 在同一逻辑主机上运行的云应用。

除了应用容器,Pod 还可以包含在 Pod 启动期间运行的 Init 容器。 你也可以在集群中支持临时性容器的情况外,为调试的目的注入临时性容器。

Pods的简介

一、资源清单参数

资源和对象

Kubernetes之上常用的资源,它把所有内容都抽象为资源,把资源实例化出来后称为对象。

相关参数

apiVersion: v1 # 必选,API 的版本号
kind: Pod # 必选,类型 Pod
metadata: # 必选,元数据
  name: nginx # 必选,符合 RFC 1035 规范的 Pod 名称
  namespace: web-testing # 可选,不指定默认为 default,Pod 所在的命名空间
  labels: # 可选,标签选择器,一般用于 Selector
    - app: nginx
  annotations: # 可选,注释列表
    - app: nginx
spec: # 必选,用于定义容器的详细信息
  containers: # 必选,容器列表
  - name: nginx # 必选,符合 RFC 1035 规范的容器名称
    image: nginx:v1 # 必选,容器所用的镜像的地址
    imagePullPolicy: Always # 可选,镜像拉取策略
    workingDir: /usr/share/nginx/html # 可选,容器的工作目录
    volumeMounts: # 可选,存储卷配置
    - name: webroot # 存储卷名称
      mountPath: /usr/share/nginx/html # 挂载目录
      readOnly: true # 只读
  ports: # 可选,容器需要暴露的端口号列表
  - name: http # 端口名称
    containerPort: 80 # 端口号
    protocol: TCP # 端口协议,默认 TCP
  env: # 可选,环境变量配置
  - name: TZ # 变量名
    value: Asia/Shanghai
  - name: LANG
    value: en_US.utf8
  resources: # 可选,资源限制和资源请求限制
    limits: # 最大限制设置
      cpu: 1000m
      memory: 1024MiB
    requests: # 启动所需的资源
      cpu: 100m
      memory: 512MiB
  readinessProbe: # 可选,容器状态检查
    httpGet: # 检测方式
      path: / # 检查路径
      port: 80 # 监控端口
    timeoutSeconds: 2 # 超时时间
    initialDelaySeconds: 60 # 初始化时间
  livenessProbe: # 可选,监控状态检查
    exec: # 检测方式
      command:
      - cat
      - /health
  httpGet: # 检测方式
    path: /_health
    port: 8080
    httpHeaders:
    - name: end-user
      value: jason
  tcpSocket: # 检测方式
    port: 80
    initialDelaySeconds: 60 # 初始化时间
    timeoutSeconds: 2 # 超时时间
    periodSeconds: 5 # 检测间隔
    successThreshold: 2 # 检查成功为 2 次表示就绪
    failureThreshold: 1 # 检测失败 1 次表示未就绪
  securityContext: # 可选,限制容器不可信的行为
    provoleged: false
  restartPolicy: Always # 可选,默认为 Always
  nodeSelector: # 可选,指定 Node 节点
    region: subnet7
  imagePullSecrets: # 可选,拉取镜像使用的 secret
  - name: default-dockercfg-86258
  hostNetwork: false # 可选,是否为主机模式,如是,会占用主机端口
  volumes: # 共享存储卷列表
  - name: webroot # 名称,与上述对应
    emptyDir: {
    
    } # 共享卷类型,空
    hostPath: # 共享卷类型,本机目录
    path: /etc/hosts
  secret: # 共享卷类型,secret 模式,一般用于密码
    secretName: default-token-tf2jp # 名称
    defaultMode: 420 # 权限
    configMap: # 一般用于配置文件
    name: nginx-conf
    defaultMode: 420
    
copy from http://www.xuexianqi.top/archives/705.html

一、资源清单的构建

可以通过通过pycharm中的kubernetes插件来构建配置清单,这样的配置的好处是,会给你智能补全,错误提示等,我们如果复制文件到master中最好也是用这种方式,方便排错

pycharm--左上角file--setting--plugins--install kubernetes--restar idle

编写配置清单-创test.yaml文件

# test.yaml


# k8s 中一切皆资源

# 定义创建的资源
# 注意规则
# 1.冒号(英文)后有个空格
# 2.大小写不能错

# kind定义资源
kind: Pod

# 通过 kubectl explain pod 拿到api版本
# 指定api版本号
apiVersion: v1

# 定义资源的基础信息
metadata:
    # 定义名称(由字母数字及中划线(不是必须)组成,必须小写同时必须以字母开头(新版本可以以数字开头了))
  name: test-pod
  # 资源标签(类似字典)
  labels:
    app: pod-test
    class: s-1  # 不允许全部数字
# 配置资源详情

spec:
  # 配置pod当中包含的容器
  containers:
    # 容器的name
    - name: nginx
      image: nginx:1.19.2
      # 属于容器的控制资源
      ports:
        # 向外暴露的端口
        - containerPort: 899
          name: http
        - containerPort: 999
          name: https
          protocol: TCP  # 向外暴露的网络类型

撰写好后拿到master机中

三、部署相关

1.清单部署

kubectl apply -f [配置清单路径]
kubectl apply -f test.yaml

kubectl create 也接受多个 -f 参数:

kubecctl apply -f test.yaml

2.查看当前系统Pod的列表

kubectl get [资源类型]
kubectl get pods

kubectl get pods  # 查看pod信息
kubectl get pods -o wide  # 查看pod详细信息
------------------------------------------------------------------------
#资源名称   是否就绪   状态      重启次数   时间   内部ip      分配的node 
NAME       READY   STATUS    RESTARTS   AGE   IP            NODE          NOMINATED NODE   READINESS GATES
test-pod   1/1     Running   0          9s    10.244.2.23   k8s-node-01   <none>           <none>

3.删除资源

kubectl delete -f [配置清单路径]
kubectl delete -f test.yaml

kubectl delete -f test2.yaml 
------------------------------------------------------------------------
pod "test-pod" deleted

image-20201209203416651

在上面我们查看pod信息中看到了几个参数,下面我们来分析这几个参数-主要是状态

四、(status)Pod的生命周期

Pod 遵循一个预定义的生命周期,起始于 Pending 阶段,如果至少 其中有一个主要容器正常启动,则进入 Running,之后取决于 Pod 中是否有容器以 失败状态结束而进入 Succeeded 或者 Failed 阶段。

和一个个独立的应用容器一样,Pod 也被认为是相对临时性(而不是长期存在)的实体。 Pod 会被创建、赋予一个唯一的 ID(UID), 并被调度到节点,并在终止(根据重启策略)或删除之前一直运行在该节点。

Pod 自身不具有自愈能力,如果 Pod 被调度到某节点(node Kubernetes中工作的机器叫做节点) 而该节点之后失效,或者调度操作本身失效,Pod 会被删除;与此类似,Pod 无法在节点资源 耗尽或者节点维护期间继续存活。Kubernetes 使用一种高级抽象,称作 控制器,来管理这些相对而言 可随时丢弃的 Pod 实例。

Pod 的 status 字段是一个 PodStatus 对象,其中包含一个 phase 字段。

Pod 的阶段(Phase)是 Pod 在其生命周期中所处位置的简单宏观概述。 该阶段并不是对容器或 Pod 状态的综合汇总,也不是为了成为完整的状态机。

Pod 阶段的数量和含义是严格定义的。 除了本文档中列举的内容外,不应该再假定 Pod 有其他的 phase 值。

下面是 phase 可能的值:

取值 描述
Pending(悬决) Pod 已被 Kubernetes 系统接受,但有一个或者多个容器尚未创建亦未运行。此阶段包括等待 Pod 被调度的时间和通过网络下载镜像的时间,
Running(运行中) Pod 已经绑定到了某个节点,Pod 中所有的容器都已被创建。至少有一个容器仍在运行,或者正处于启动或重启状态。
Succeeded(成功) Pod 中的所有容器都已成功终止,并且不会再重启。
Failed(失败) Pod 中的所有容器都已终止,并且至少有一个容器是因为失败终止。也就是说,容器以非 0 状态退出或者被系统终止。
Unknown(未知) 因为某些原因无法取得 Pod 的状态。这种情况通常是因为与 Pod 所在主机通信失败。

如果某节点死掉或者与集群中其他节点失联,Kubernetes 会实施一种策略,将失去的节点上运行的所有 Pod 的 phase 设置为 Failed

注意你还可能会遇到Terminating状态,在节点处于“不可用”状态时,CCE会迁移节点上的容器实例,并将节点上运行的pod置为**“Terminating”状态。待节点恢复后,处于“Terminating”**状态的pod会自动删除。

五、Pod的重启策略

也就是清单参数中的restartPolicy: Always

重启策略 描述
Always 任何情况下 容器宕机,kubernetes都会重启,默认
On-Failure 当容器非正常状态下退出,k8s重启
Never 任何情况下 都不重启

六、Pod镜像拉取策略

也是在清单参数的sepc下的imagePullPolicy: Always

重启策略 描述
IfNotPresent 如果当前系统镜像已存在 则不再拉取,如果不存在 则去镜像仓库拉取镜像 默认
Always 不管当前系统镜像是否存在,都去镜像仓库拉取镜像
Never 不管当前系统镜像是否存在,都不去镜像仓库拉取镜像

七、查看 kube-system(命名空间)中的节点

这里主要用来拍错

 kubectl get pods -n kube-system # 查看 kube-system(命名空间)中的节点
 --------------------------------------------------------------------
NAME                                 READY   STATUS    RESTARTS   AGE
coredns-7dcc599b9f-gt4lz             1/1     Running   2          24h
coredns-7dcc599b9f-psxlg             1/1     Running   2          24h
etcd-k8s-master                      1/1     Running   2          24h
kube-apiserver-k8s-master            1/1     Running   2          24h
kube-controller-manager-k8s-master   1/1     Running   2          24h
kube-flannel-ds-bkvp4                1/1     Running   0          3h15m
kube-flannel-ds-mwrf6                1/1     Running   2          24h
kube-flannel-ds-s46tm                1/1     Running   1          23h
kube-proxy-b4g6t                     1/1     Running   1          23h
kube-proxy-nc2kz                     1/1     Running   0          3h15m
kube-proxy-qxx5l                     1/1     Running   2          24h
kube-scheduler-k8s-master            1/1     Running   2          24h
# 如果重启次数过多 代表有问题

kubectl get pods -n kube-system  -o wide
 --------------------------------------------------------------------
NAME                                 READY   STATUS    RESTARTS   AGE     IP            NODE          NOMINATED NODE   READINESS GATES
coredns-7dcc599b9f-gt4lz             1/1     Running   2          24h     10.244.0.10   k8s-master    <none>           <none>
coredns-7dcc599b9f-psxlg             1/1     Running   2          24h     10.244.0.8    k8s-master    <none>           <none>
etcd-k8s-master                      1/1     Running   2          24h     10.0.0.80     k8s-master    <none>           <none>
kube-apiserver-k8s-master            1/1     Running   2          24h     10.0.0.80     k8s-master    <none>           <none>
kube-controller-manager-k8s-master   1/1     Running   2          24h     10.0.0.80     k8s-master    <none>           <none>
kube-flannel-ds-bkvp4                1/1     Running   0          3h17m   10.0.0.81     k8s-node-01   <none>           <none>
kube-flannel-ds-mwrf6                1/1     Running   2          24h     10.0.0.80     k8s-master    <none>           <none>
kube-flannel-ds-s46tm                1/1     Running   1          24h     10.0.0.82     k8s-node-02   <none>           <none>
kube-proxy-b4g6t                     1/1     Running   1          24h     10.0.0.82     k8s-node-02   <none>           <none>
kube-proxy-nc2kz                     1/1     Running   0          3h17m   10.0.0.81     k8s-node-01   <none>           <none>
kube-proxy-qxx5l                     1/1     Running   2          24h     10.0.0.80     k8s-master    <none>           <none>
kube-scheduler-k8s-master            1/1     Running   2          24h     10.0.0.80     k8s-master 

#  地址不一致往往时 /etc/hosts 问题没对应

image-20201209112901994

image-20201209120037836

image-20201209122226265

猜你喜欢

转载自blog.csdn.net/A1L__/article/details/110940973