K8S中最小的基本单位是pod,每个pod有一个IP,Docker是运行环境,一个pod里面可包含多个docker容器,pod里面的容器共享同一个IP地址。pod中容器互相访问通过127.0.0.1地址访问。

kubeclt get nodes  查看集群信息

----命名空间

kubectl create ns  `namespace`    创建命名空间  (隔离资源) 

kubectl delete ns `namespace`     删除命名空间 (同时会把该命名空间下的pod全部删除)

-----run pod方式  这种创建方式没有自愈能力

kubectl run `podname` --image=nginx [--image=tomcat] [-n  `namespace`]    [指定命名空间] 创建[包含多个容器的]pod,默认的namespace是default  

kubectl get pod [-n `namespace`] [-owide]    获取pod详细信息(-owide包含IP信息)  

watch -n 1 kubectl get pod 或 kubectl get pod -w        监控pod状态

kubectl delete pod pod1 [pod2] [-n `namespace`]      删除[指定命名空间下的]pod

kubectl describe pod `podname`  查看pod的启动情况

kubectl logs [-f] `podname` [容器name]   查看pod中应用的日志

kubectl get pods mynginx -o jsonpath={.spec.containers[*].name}  查看pod中包含了哪些容器应用

-----create deployment方式    该方式pod具有自愈&故障转移能力  (某个节点工作异常,节点上的应用会重启;某个应用节点宕机,应用会转移到其它节点启动 )   多副本能力  在工作节点总共启动多个应用

kubectl create deployment `depname` --image=nginx [-n `namespace`]  [--replicas=3] 创建部署,将应用部署3份;(工作节点)  

kubectl get deployment     获取部署

kubelctl delete deployment  `depname`         删除部署以及部署下的pods

扩缩容:

方式1:

        --扩容:kubectl scale deploy/my-dep --replicas=5

        --缩容:kubectl scale deploy/my-dep --replicas=2

方式2:

        kubectl edit deploy `depname`    修改replicas数目。

滚动更新(不停机更新):

kubectl set image deployment/`my-dep` nginx=nginx:1.16.1 --record

更新之后查看镜像版本是否正确:

kubectl get deploy/my-dep -oyaml|grep image

版本回退:

kubectl rollout history deployment/my-dep   查看历史版本

kubectl rollout undo deploy/my-dep --to-revision=1      回退到指定版本1

将my-dep暴露为服务:

kubectl expose deploy my-dep --port=8000 --target-port=80   --type=ClusterIP   集群内部访问,在内部   my-dep.namespace.svc:8000 域名方式也可访问  
 

Deployment yaml 详解:
apiVersion: apps/v1  # 指定api版本,此值必须在kubectl api-versions中  
kind: Deployment  # 指定创建资源的角色/类型   
metadata:  # 资源的元数据/属性 
  name: demo  # 资源的名字,在同一个namespace中必须唯一
  namespace: default # 部署在哪个namespace中
  labels:  # 设定资源的标签
    app: demo
    version: stable
spec: # 资源规范字段
  replicas: 1 # 声明副本数目
  revisionHistoryLimit: 3 # 保留历史版本
  selector: # 选择器
    matchLabels: # 匹配标签
      app: demo
      version: stable
  strategy: # 策略
    rollingUpdate: # 滚动更新
      maxSurge: 30% # 最大额外可以存在的副本数,可以为百分比,也可以为整数
      maxUnavailable: 30% # 示在更新过程中能够进入不可用状态的 Pod 的最大值,可以为百分比,也可以为整数
    type: RollingUpdate # 滚动更新策略
  template: # 模版
    metadata: # 资源的元数据/属性 
      annotations: # 自定义注解列表
        sidecar.istio.io/inject: "false" # 自定义注解名字
      labels: # 设定资源的标签
        app: demo
        version: stable
    spec: # 资源规范字段
      containers:
      - name: demo # 容器的名字   
        image: demo:v1 # 容器使用的镜像地址   
        imagePullPolicy: IfNotPresent # 每次Pod启动拉取镜像策略,三个选择 Always、Never、IfNotPresent
                                      # Always,每次都检查;Never,每次都不检查(不管本地是否有);IfNotPresent,如果本地有就不检查,如果没有就拉取 
        resources: # 资源管理
          limits: # 最大使用
            cpu: 300m # CPU,1核心 = 1000m
            memory: 500Mi # 内存,1G = 1024Mi
          requests:  # 容器运行时,最低资源需求,也就是说最少需要多少资源容器才能正常运行
            cpu: 100m
            memory: 100Mi
        livenessProbe: # pod 内部健康检查的设置
          httpGet: # 通过httpget检查健康,返回200-399之间,则认为容器正常
            path: /healthCheck # URI地址
            port: 8080 # 端口
            scheme: HTTP # 协议
            # host: 127.0.0.1 # 主机地址
          initialDelaySeconds: 30 # 表明第一次检测在容器启动后多长时间后开始
          timeoutSeconds: 5 # 检测的超时时间
          periodSeconds: 30 # 检查间隔时间
          successThreshold: 1 # 成功门槛
          failureThreshold: 5 # 失败门槛,连接失败5次,pod杀掉,重启一个新的pod
        readinessProbe: # Pod 准备服务健康检查设置
          httpGet:
            path: /healthCheck
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 30
          timeoutSeconds: 5
          periodSeconds: 10
          successThreshold: 1
          failureThreshold: 5
        #也可以用这种方法   
        #exec: 执行命令的方法进行监测,如果其退出码不为0,则认为容器正常   
        #  command:   
        #    - cat   
        #    - /tmp/health   
        #也可以用这种方法   
        #tcpSocket: # 通过tcpSocket检查健康  
        #  port: number 
        ports:
          - name: http # 名称
            containerPort: 8080 # 容器开发对外的端口 
            protocol: TCP # 协议
      imagePullSecrets: # 镜像仓库拉取密钥
        - name: harbor-certification
      affinity: # 亲和性调试
        nodeAffinity: # 节点亲和力
          requiredDuringSchedulingIgnoredDuringExecution: # pod 必须部署到满足条件的节点上
            nodeSelectorTerms: # 节点满足任何一个条件就可以
            - matchExpressions: # 有多个选项,则只有同时满足这些逻辑选项的节点才能运行 pod
              - key: beta.kubernetes.io/arch
                operator: In
                values:
                - amd64

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐