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

 

posted on 2021-03-24 15:19  bofeng  阅读(503)  评论(0编辑  收藏  举报