码迷,mamicode.com
首页 > Web开发 > 详细

kubernetes之dop Deployment

时间:2020-12-15 12:22:28      阅读:4      评论:0      收藏:0      [点我收藏+]

标签:health   deploy   version   pat   spec   second   ade   webroot   space   

一:介绍

 

1.简介

K8s有很多技术概念,同时对应很多API对象,最重要的也是最基础的是微服务

Pod是在K8s部署中运行部署应用或服务的最小单元,它是可以支持多容器的

Pod的设计理念是支持多个容器在一个Pod中共享网络地址和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务

如果您运行一个操作系统发行版的软件仓库,一个Nginx容器用于发布软件,另一个容器专为从源仓库做同步,这两个容器的可能不太可能是一个团队开发的,但是他们一块儿工作才能提供一个微服

这种情况下,不同的团队各自开发内置自己的容器组件,在部署的时候组合成一个微服务对外提供服务,这就是K8S中的POD

 

2.Pod带来的好处

 

①Pod做为一个可以独立运行的服务单元,简化了应用部署的难度,以更高的抽象层次为应用部署管提供了极大的方便

 

②Pod做为最小的应用实例可以独立运行,因此可以方便的进行部署,水平扩展和收缩,方便进行调度管理与资源的分配

 

③Pod中的容器共享相同的数据和网络地址空间,Pod之间也进行了统一的资源管理与分配。

 

3.Pod是如何管理多个容器的

Pod中可以同时运行多个进程(作为容器运行)协同工作

同一个Pod中的容器会自动的分配到同一个节点上

同一个Pod中的容器共享资源,网络环境和依赖,所以它们总是被同时调度

在一个Pod中同时运行多个容差器是一种比较高级的用法

只有当你的容器需要紧密配合协作的时候才考虑用这种模式

 

4.Pod中的数据持久性

Pod在设计?持就不是作为持久化实体的在

调度失败,预警故障,常规资源或维护的状态下都会死掉会被驱逐

通常,我们是需要重新部署Docker存储卷这样的资源来做Pod的数据持久化的

 

5.资源清单格式

# 在kubernetes中,一切皆资源
# 定义创建的资源
kind: Pod
# 指定API版本号
apiVersion: v1
# 定义当前资源的元数据
metadata:
  # 定义名称(由字母、数字、横杠组成,必须小写,必须以字母或数字开头)
  name: test-pod
  # 资源标签
  labels:
    app: pod-test
    class: darker
# 配置资源详情
spec:
  # 重启策略:Always(默认)、On-Failure、Never
  restartPolicy: Always
  # 配置Pod当中包含的容器
  containers:
    # 指定容器名称
    - name: nginx
      # 指定镜像
      image: nginx:1.19.2
      # 镜像拉取策略
      imagePullPolicy: 
      # 指定容器暴露的端口
      ports:
        - containerPort: 80
          name: http
        - containerPort: 443
          name: https
          # 指定端口的网络协议
          protocol: TCP
    - name: django
      image: alvinos/django:v1

4.Pod的资源清单详解

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

5,生命周期

状态描述
挂起(待定) API服务器创建了pod资源对象已存入etcd中
但它尚未被调度完成或者仍处于从仓库下载之上的过程中
运行中(Running) Pod已经被调度至某议员,并且所有容器都已经被kubelet创建完成
成功(成功) Pod中的所有容器都已经成功终止并且不会被重启
失败(Failed) Pod中的所有容器都已终止了,并且至少有一个容器是因为失败终止
即容器以非0状态退出或被系统禁止
未知(Unknown) Api服务器无法正常获取到Pod对象的状态信息
通常是由于无法与所在工作路由器的kubelet通信所致
 

6.Pod的重启策略

重启策略描述
总是 任何情况下容器停止运转,kubernetes都会重启
失败时 当容器非正常状态下退出,k8s重新启动
决不 任何情况下都不重启
 

7,荚果拉取策略

重启策略描述
如果不存在 如果当前系统概述已存在则不再拉取,如果不存在则去先前仓库拉取较长
总是 不论当前系统是否存在,都去仓库拉取额外
决不 不管任何当前系统是否存在,都不去过多仓库拉取额外
 

二:基本使用

 

1.部署

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

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

# 查看当前系统Pod的列表
kubectl get [资源类型]
kubectl get pods 

# 展示标签
kubectl get pods --show-labels

# 查看详情信息
kubectl get pods -o wide

# 查看当前pod的配置资源
kubectl explain Pod
kubectl explain Pod.spec

.查找

# 查看pods的标签
kubectl get pods --show-labels

# 通过标签找到pod
kubectl get pods -l class=darker

4.删除

# 删除资源
kubectl delete -f [配置清单路径]
kubectl delete -f test.yaml

# 通过标签删除pod
kubectl delete pods -l class=darker

5.筛选

 筛选资源
kubectl get -f [资源清单路径]

6.通过配置清单,建造一个nginx服务

# 创建1个nginx
kind: Pod
apiVersion: v1
metadata:
  name: nginx-test
  labels:
    app: pod-test
    class: darker
spec:
  containers:
    - name: nginx
      image: nginx:1.19.2

查看nginx

kubectl get pods -l class=darker -o wide


[root@kubernetes-master-01 ~]# kubectl get pods -l class=darker -o wide
NAME         READY   STATUS    RESTARTS   AGE     IP           NODE                 NOMINATED NODE   READINESS GATES
nginx-test   1/1     Running   0          2m45s   10.244.1.8   kubernetes-node-01   <none>           <none>

查看

kubectl get pods -n kube-system -o wide


[root@kubernetes-master-01 ~]# kubectl get pods -n kube-system -o wide
NAME                                           READY   STATUS    RESTARTS   AGE     IP            NODE                   NOMINATED NODE   READINESS GATES
coredns-7dcc599b9f-25lvl                       1/1     Running   0          3h11m   10.244.0.2    kubernetes-master-01   <none>           <none>
coredns-7dcc599b9f-r24kj                       1/1     Running   0          3h11m   10.244.0.3    kubernetes-master-01   <none>           <none>
etcd-kubernetes-master-01                      1/1     Running   0          3h11m   172.16.0.50   kubernetes-master-01   <none>           <none>
kube-apiserver-kubernetes-master-01            1/1     Running   0          3h11m   172.16.0.50   kubernetes-master-01   <none>           <none>
kube-controller-manager-kubernetes-master-01   1/1     Running   0          3h11m   172.16.0.50   kubernetes-master-01   <none>           <none>
kube-flannel-ds-58qfj                          1/1     Running   0          3h3m    172.16.0.54   kubernetes-node-02     <none>           <none>
kube-flannel-ds-7ndcg                          1/1     Running   0          3h3m    172.16.0.53   kubernetes-node-01     <none>           <none>
kube-flannel-ds-gqlcd                          1/1     Running   0          3h10m   172.16.0.50   kubernetes-master-01   <none>           <none>
kube-proxy-924sw                               1/1     Running   0          3h3m    172.16.0.54   kubernetes-node-02     <none>           <none>
kube-proxy-bp4z5                               1/1     Running   0          3h11m   172.16.0.50   kubernetes-master-01   <none>           <none>
kube-proxy-td8h6                               1/1     Running   0          3h3m    172.16.0.53   kubernetes-node-01     <none>           <none>
kube-scheduler-kubernetes-master-01            1/1     Running   0          3h11m   172.16.0.50   kubernetes-master-01   <none>           <none>

 

kubernetes之dop Deployment

标签:health   deploy   version   pat   spec   second   ade   webroot   space   

原文地址:https://www.cnblogs.com/ltyc/p/14110746.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!