zoukankan      html  css  js  c++  java
  • 【k8s】3-kubectl 命令以及 yaml文件学习

    Kubectl apiserver 管理对象命令

      Pod service replicaset deployment statefulet daemonset job cronjob node

    Kubectl get cs 查看信息等 

    命令启动pod

    Kubectl run -> create a deployment or job manage the created container

    Kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80   普通pod

    Kubectl run pi --schedule=”0/5 * * * ?” --image=perl  job控制器   

    # 查看信息

    kubectl get svc

    kubectl get pods

    kubectl get deployments

    kubectl describe pods nginx-deploy   # 列出所有pod详情

    kubectl describe deployment nginx-deploy  # 列出deployment控制器详情

    # 暴露端口 创建svc

    expose deployment nginx-deploy --name=nginx-deploy --port=80 --protocol=TCP --target-port=80

    # 修改副本集 数量为5

    kubectl scale --replicas=5 deployment nginx-deploy 

    # 滚动更新

    kubectl set image deployment nginx-deploy nginx=nginx:1.5

      

    # 查看滚动更新情况

    kubectl rollout status deployment nginx-deploy

    # 修改对外访问

    # 手动在外部做负载均衡器到内部端口

    kubectl edit svc nginx-deploy 

    Type: ClusterIP ---> Nodeport

    kubectl get svc

    Curl nodeip:随机端口 

    yaml文件的学习

    配置清单

    # 查看pod配置清单 以yaml文件输出

    kubectl get pods nginx-deploy-5bf87f5f59-bgzl7 -o yaml

    # 大部分资源配置清单

    Apiversiongroup/versi on   # Kubectl api-versions 所属群组

    kind: 资源类别

    metadata:元数据

      Name:名称唯一

      Namespace:名称空间

      Labels:标签

      Annotations

      SelfLink: /api/GROUP/VERSION/namespaces/NAMESPACE_NAME/TYPE/NAME

    spec: 期望状态 disired state

    status: 让当前状态 current state 本字段由kubernetes集群维护

    kubectl explain pods 内嵌说明

    Kubectl explain pods.spec 

    Yaml文件
    # 创建
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-demo
      namespace: default
      labels:
        app: myapp
        tier: frontend
    spec:    
      containers:
      - name: myapp
        image: nginx
      - name: busybox
        image: busybox:latest
        command:
        - "/bin/sh"
        - "-c"
        - "sleep 3500"

    kubectl create -f pod-demo.yaml  # 创建pod 

    kubectl exec -it pod-demo -c myapp -- /bin/sh    # 进入pod

    Kubectl delete -f pod-demo.yaml  # 删除pod

     

     Pod资源:

     

    spec.containers <[]object>
    - name <string> Image <string> imagePullPolicy <string> # Always拉取最新的,Never 本地没有不拉取,if本地没有再拉取 Always, Never 镜像中默认的应用: command,args
    标签:
       key=value
       Key: 字母 数字 _ 开头、 Value: 可为空 字母数字 

           标记标签

    Kubectl label pods pod-demo release=canary

    修改标签

    Kubectl label pods pod-demo release=stable --overwrite

    选择标签

    Kubectl get pods -l release

    标签选择器

    等值关系 Kubectl get pods -l release=stable,app=myapp

    集合关系 -l “release notin (canary,beta,alpha)”

    许多资源支持内嵌字段

    matchLabels: 直接给定键值

    matchExpressions: 基于给定的表达式来使用选择器

    In,Notin:values

                     Exists,NotExists:values指必须为空列表

    nodeSelector <map[string]string>

    节点标签选择器

    kebectl label nodes node_name disktype=ssd

    Cat >>nginx-deploy.yaml<< EOF

    nodeSelector:

    Disktype: ssd

    EOF

    Annotations:

    label不同的地方在于不能用于挑选资源对象 仅用于为对象提供元数据

     

    Pod生命周期

    状态:pending 已经创建 但是没有适合配置的节点

        Running 运行状态

                      Failed 失败......

    创建Pod

    Pod生命周期中重要行为:

    初始化容器

    容器探测

    Liveness

    Readiness

             RestartPolicy:

             Always, OnFailure, Never 

        探针类型三种

             ExecActionTcpsocketActionHttpGetAction

     

    # kubectl explain pod.spec.containers.livenessProbe

    HTTPGET 
    apiVersion: v1
    kind: Pod
    metadata:
      name: liveness-httpget-pod
      namespace: default
    spec:
      containers:
      - name: liveness-httpget-container
        image: ikubernetes/myapp:v1
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 80
        livenessProbe:
          httpGet:
            port: 80
            path: /index.html
          initialDelaySeconds: 1
          periodSeconds: 3
    文件检查 
    EXEC
    apiVersion: v1
    kind: Pod
    metadata:
      name: liveness-exec-pod
      namespace: default
    spec:
      containers:
      - name: liveness-exec-container
        image: busybox:latest
        imagePullPolicy: IfNotPresent
        command: ["/bin/sh","-c","touch /tmp/healthy; slepp 30; rm -rf /tmp/healthy; sleep 3600"]
        livenessProbe:
          exec:
            command: ["test","-e","/tmp/healthy"]
      #restartPolicy:
          initialDelaySeconds: 1
          periodSeconds: 3

    #  pods yaml回顾

     apiVersion, kind, metadata, spec statu(只读)

    Spec:

    containers

    nodeSelector

    nodeName

    restartPolicy:

    Always,Never,OnFailure

    containers:

    name

    image

    imagePullPolicy

    Ports:

    name

    containerPort

    livenessProbe

    readinessProbe

    liftcycle

    ExecAction: exec

    TCPSocketAction: tcpSocket

    HTTPGetAction: httpGet

     

    Pod控制器

    ReplicaSet: 控制副本数量 支持滚动更新

    Deployment: 工作在ReplicaSet 滚动更新回滚 声明

    Daemon: 每个节点只运行一个POD副本 系统级守护进程

    Job:一次性任务

    Cronjob: 周期性JOB

    StatefulSet:  有状态服务

     

    kubectl edit rs myapp

    Kubectl explain deploy

    # 打补丁 更新

    kubectl apply -f deploy-demo.yaml

    Kubectl set image deployment myapp-deploy myapp=ikubernetes/myapp:v3

    Kubectl path deployment myapp-deploy -p ‘{“spec”:{“strategy”:”{“rollingUpdate”:{“maxsurge”:1,”maxUnavailable”:0}}}}’

     

    # 回滚

    kubectl get deployment -o wide

    kubectl rollout history deployment

    rollout undo deployment myapp-deploy --to-revision=1

     

     

      

     

  • 相关阅读:
    观察者模式
    工厂模式
    单例模式
    关于状态机
    关于memset的错误使用
    关于STL容器
    关于内存及其相关
    python学习手册:第十一章——赋值表达式及打印
    python学习手册:第九章——元组、文件及其他
    python学习手册:第七章——字符串
  • 原文地址:https://www.cnblogs.com/oscarli/p/12788584.html
Copyright © 2011-2022 走看看