• k8s使用


    一、常用命令

    ● 获取当前命名空间下的容器

    kubectl get po

    ● 查看某命名空间下的容器

    kubectl get pods --namespace=development

    ● 获取所有容器列表

    kubectl get all

    ● 创建容器

    kubectl create -f kubernate-pvc.yaml

    ● 删除容器

    kubectl delete pods/test-pd
    kubectl delete -f rc-nginx.yaml

    ● 删除所有容器

    kubectl delete pod --all

    ● 替换容器

    kubectl replace -f mytomcat.rc.yaml

    ● 查看指定pod跑在哪个node上

    kubectl get pod /test-pd -o wide

    ● 查看容器日志

    kubectl logs nginx-8586cf59-mwwtc

    ● 进入容器终端命令

    kubectl exec -it nginx-8586cf59-mwwtc /bin/bash

    一个pod里有多个容器时(假如这里有个Pod名为my-pod,这个Pod有两个容器,分别名为main-app 和 helper-app)

    kubectl exec -it my-pod --container main-app -- /bin/bash

    ● 容器详情列表

    kubectl describe po mysql-m8rbl

    ● 查看容器状态

    kubectl get svc

    ● 删除所有服务

    kubectl delete svc --all

     ● 设置RC副本数量

    kubectl scale rc nginx --replicas=5

    二、yaml核心配置

    1.Pod

    ● 一个容器组成的Pod

    apiVersion: v1
    kind: Pod
    metadata:
      name: mytomcat
      labels:
        name: mytomcat
    spec:
      containers:
      - name: mytomcat
        image: 192.168.126.112:5000/docker.io/tomcat
        ports:
        - containerPort: 8080

    ● 两个紧密耦合的容器

    apiVersion: v1
    kind: Pod
    metadata:
      name: myweb
      labels:
        name: tomcat-redis
    spec:
      containers:
      - name: tomcat
        image: tomcat
        ports:
        - containerPort: 8080
      - name: redis
        image: redis
        ports:
        - containerPort: 6379

    ● 资源配置(容器申请最少0.25个CPU以及64MiB内存,在运行过程中容器所能使用的资源配额为0.5个 CPU以及128MiB内存)

    sepc
      containers:
      - name: db
        image: mysql
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"

    2.Label(常用在metadata.labels字段)

    apiVersion: v1
    kind: ReplicationController
    metadata:
     name: nginx
    spec:
     replicas: 3
     selector:
      app: nginx
     template:
      metadata:
       labels:
        app: nginx
      spec:
       containers:
       - name: nginx
         image: nginx
         ports:
         - containerPort: 80

    通过spec.selector来引用对象

    apiVersion: v1
    kind: Service
    metadata:
     name: nginx
    spec:
     type: NodePort
     ports:
      - port: 80
        nodePort: 33333
     selector:
       app: nginx

    3.RC

    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: mywebapp
    spec:
      replicas: 1
      template:
        metadata:
          name: mywebapp
          labels:
            app: mywebapp
        spec:
          containers:
          - name: mywebapp
            image: 192.168.126.112:5000/docker.io/tomcat
            ports:
            - containerPort: 8080

    svc

    apiVersion: v1
    kind: Service
    metadata:
      name: mywebapp-svc
    spec:
      ports:
      - port: 8081
        targetPort: 8080
      selector:
        app: mywebapp

    4.Deployment(为了更好解决Pod编排问题)

    apiVersion: apps/v1beta1
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      replicas: 1
      template:
        metadata:
          name: nginx
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            resources:
              requests:
                cpu: 50m
            ports:
            - containerPort: 80

    Horizontal Pod Autoscaler,根据Pod的CPU使用率自动扩缩容

    apiVersion: autoscaling/v1
    kind: HorizontalPodAutoscaler
    metadata:
      name: nginx-hpa
    spec:
      scaleTargetRef:
        apiVersion: app/v1beta1
        kind: Deployment
        name: nginx-deployment
      minReplicas: 1
      maxReplicas: 10
      targetCPUUtilizationPercentage: 50

    svc

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-svc
    spec:
      ports:
      - port: 80
      selector:
        app: nginx

    5.Volumn(共享目录)

    ● emptyDir

    apiVersion: v1
    kind: Pod
    metadata:
      name: test-pd
    spec:
      containers:
      - image: docker.io/nazarpc/webserver
        name: test-container
        volumeMounts:
        - mountPath: /cache
          name: cache-volume
      volumes:
      - name: cache-volume
        emptyDir: {}

    ● hostPath

    apiVersion: v1
    kind: Pod
    metadata:
      name: test-pd
    spec:
      containers:
      - image: docker.io/nazarpc/webserver
        name: test-container
        # 指定在容器中挂接路径
        volumeMounts:
        - mountPath: /test-pd
          name: test-volume
      # 指定所提供的存储卷
      volumes:
      - name: test-volume
        # 宿主机上的目录
        hostPath:
          # directory location on host
          path: /data

    ● nfs

    apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
    kind: Deployment
    metadata:
      name: redis
    spec:
      selector:
        matchLabels:
          app: redis
      revisionHistoryLimit: 2
      template:
        metadata:
          labels:
            app: redis
        spec:
          containers:
          # 应用的镜像
          - image: redis
            name: redis
            imagePullPolicy: IfNotPresent
            # 应用的内部端口
            ports:
            - containerPort: 6379
              name: redis6379
            env:
            - name: ALLOW_EMPTY_PASSWORD
              value: "yes"
            - name: REDIS_PASSWORD
              value: "redis"
            # 持久化挂接位置,在docker中
            volumeMounts:
            - name: redis-persistent-storage
              mountPath: /data
          volumes:
          # 宿主机上的目录
          - name: redis-persistent-storage
            nfs:
              path: /k8s-nfs/redis/data
              server: 192.168.126.112

    6.Namespace

    apiVersion: v1
    kind: Namespace
    metadata:
      name: development

    Pod

    apiVersion: v1
    kind: Pod
    metadata:
      name: busybox
      namespace: development
    spec:
      containers:
      - image: busybox
        command:
         - sleep
         - "3600"
        name: busybox

     7.Service

    7.1配置案例

    ● 多端口Service

    apiVersion: v1
    kind: Service
    metadata:
      name: mywebAppService
    spec:
      ports:
      - port: 8080
        targetPort: 8080
        name: web
      - port: 8005
        targetPort: 8005
        name: management
      selector:
        app: mywebapp

    ● 外部服务Service

    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      ports:
      - protocol: TCP
        port: 80
        targetPort: 80

    Endpoints

    apiVersion: v1
    kind: Endpoints
    metadata:
      name: my-service
    subsets:
    - addresses:
      - ip: 10.254.74.3
      ports:
      - port: 8080

    7.2配置属性说明:

    ● metadata.namespace:命名空间,默认为default

    ● spec.type:Service的类型,指定Service的访问方 式,默认值为ClusterIP。取值范围如下:

    ClusterIP:虚拟服务的IP,用于k8s 集群内部的pod访问,在Node上kubeproxy通过设置的Iptables规则进行转 发。

    NodePort:使用宿主机的端口,使 用能够访问各Node的外部客户端通过 Node的IP地址和端口就能访问服务。

    LoadBalancer: 使用外接负载均衡器完成 到服务的负载分发,需要在 spec.status.loadBalancer字段指定外部 负载均衡器的IP地址,并同时定义 nodePort和clusterIP,用于公有云环境。

    ● spec.clusterIP:虚拟服务的IP地址,当type=clusterIP 时,如果不指定,则系统进行自动分配。也可以手工指定。当 type=LoadBalancer时,则需要指定

    ● spec.sessionAffinity:是否支持Session,可选值为ClientIP, 表示将同一个源IP地址的客户端访问请求 都转发到同一个后端Pod。默认值为空

    ● spec.ports[].protocol:端口协议,支持TCP和UDP,默认值为 TCP

    ● spec.ports[].port:服务监听的端口号

    ● spec.ports[].targetPort:需要转发到后端Pod的端口号

    ● spec.ports[].nodePort:当spec.type=NodePort时,指定映射到 物理机的端口号

    ● status:当spec.type=LoadBalancer时,设置外部负载均衡器的地址,用于公有云环境

    ● status.loadBalancer.ingress:外部负载均衡器

    三、详细配置

    apiVersion: v1 //版本
    kind: Pod //类型,pod
    metadata: //元数据
    name: string //元数据,pod的名字
    namespace: string //元数据,pod的命名空间
    labels: //元数据,标签列表
    - name: string //元数据,标签的名字
    annotations: //元数据,自定义注解列表
    - name: string //元数据,自定义注解名字
    spec: //pod中容器的详细定义
    containers: //pod中的容器列表,可以有多个容器
    - name: string //容器的名称
    image: 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: Srting
    memory: string
    requeste: //资源限制,容器启动的初始可用资源数量
    cpu: string
    memory: string
    livenessProbe: //pod内容器健康检查的设置
    exec:
    command: [string]    //exec方式需要指定的命令或脚本
    httpGet: //通过httpget检查健康
    path: string
    port: number
    host: string
    scheme: Srtring
    httpHeaders:
    - name: Stirng
    value: string
    tcpSocket: //通过tcpSocket检查健康
    port: number
    initialDelaySeconds: 0//首次检查时间
    timeoutSeconds: 0 //检查超时时间
    periodSeconds: 0 //检查间隔时间
    successThreshold: 0
    failureThreshold: 0
    securityContext: //安全配置
    privileged: falae
    restartPolicy: [Always|Never|OnFailure]//重启策略,默认值为Always
    nodeSelector: object //节点选择,表示将该Pod调度到包含这些label的Node上,以key:value格式指定
    imagePullSecrets:
    - name: string
    hostNetwork: false //是否使用主机网络模式,弃用Docker网桥,默认否
    volumes: //在该pod上定义共享存储卷列表
    - name: string
    emptyDir: {} //是一种与Pod同生命周期的存储卷,是一个临时目录,内容为空
    hostPath: //Pod所在主机上的目录,将被用于容器中mount的目录
    path: string
    secret: //类型为secret的存储卷
    secretName: string
    item:
    - key: string
    path: string
    configMap: //类型为configMap的存储卷
    name: string
    items:
    - key: string
    path: string
  • 相关阅读:
    SQL Server 日期和时间函数
    sql日期格式化函数
    C#中事件的使用
    CSS中的display:inline-block
    用aspnet_regiis注册Framework4.0框架
    什么是CSS hack
    第一次MySQL的SQL注入实验
    (二分)Block Towers(cf626)
    (多线程dp)Matrix (hdu 2686)
    (数位dp)Bomb (hdu 3555)
  • 原文地址:https://www.cnblogs.com/naixin007/p/14573690.html
Copyright © 2020-2023  润新知