1.操作namespace

kubectl create ns hello
kubectl delete ns hello
#yaml
apiVersion: v1
kind: Namespace
metadata:
   name: hello

2.pod:运行的一组容器,pod是kubernetes中应用最小的单位

3.k8s运行pod

kubectl run mynginx  --image=nginx
或者使用yamlkubectl apply -f xxx.yaml
apiVersion: v1
kind: Pod
metadata:
    labels:
      run: mynginx
    name: mynginx
spec:
    containers:
    - image: nginx
    - name: mynginx

4.查看pod运行日志

kubectl logs pod

5.查看k8s分配的pod的ip是多少

kubectl get pod -owide

6.进入容器里面修改

kubectl exec -it mynginx -- /bin/bash

7.一个pod运行多个容器

apiVersion: v1
kind: Pod
metadata:
     labels:
        run: myapp
     name:
spec:
    containers:
    - images: nginx
    - name: nginx
    - images: tomcat:8.5.69
    - name: tomcat

8. 查看pod异常排错,描述

kubectl describe pod redis

9.Deployment

控制pod,使pod拥有多副本,自愈,扩缩容等能力

kubectl create deployment mytomcat --image=tomcat:8.5.68

删除pod

kubectl delete pod myapp mynginx -n dedault

通过deployment创建pod拥有自愈能力即使使用普通方法删除也会生成新的pod

kubectl create deployment mytomcat --image=tomcat:8.0.58(使用普通方法无法删除pod)

删除deployment创建的pod

kubectl delete deployment mytomcat

使用deployment的多副本能力,让同一个应用产生3份

kubectl create deployment mytomcat --image=nginx --replicas=3

使用yaml文件也可以实现多副本

 

k8s查看pod容器清单 k8s查看pod的cpu负载情况_nginx

 扩缩容能力

kubectl scale --replicas=5 deployment/mynginx
或者直接修改replicas
kubectl edit  deployment/mynginx

部署更新 

使用命令获取deployment的配置,以ymal的方式输出
kubectl get deployment/my-dep -oyaml
使用此命令设置更新deployment的版本
kubectl set image deployment/my-dep nginx=nginx:1.16.1 --record
使用此命令设置更新pod的版本,加上record参数会打一个标签版本
kubectl set image pod redis redis=redis:4.0.8 --record

部署回退

查看deployment版本历史记录
kubectl rollout history deployment/my-dep
查看某个版本历史详情
kubectl rollout history deployment/my-dep --revision=2
回滚(回到上一次)
kubectl rollout undo deployment/mynginx
回滚(到指定版本)
kubectl rollout undo deployment/mynginx --to-revision=2
暂停部署
kubectl rollout pause deployment/mynginx
恢复部署 
kubectl rollout resume deployment mynginx

除了deployment,k8s还有StatefulSet、DameonSet、Job等类型资源。有状态应用使用StatefulSet部署、无状态使用Deployment部署

Deployment:无状态应用部署,比如微服务,提供多副本等功能

StatefulSet:有状态应用部署,比如redis,提供稳定的存储,网络等功能

DaemonSet:守护型应用部署,比如日志收集组件,在每个机器上都运行一份,每台机器有且仅有一份

Job/CronJob:定时任务部署,比如垃圾清理组件,可以在指定时间运行

https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/  #官方文档

10.StatefulSet 专门针对有状态服务进行部署的一个控制器。

扩容缩容

kubectl scale statefulset web --replicas=5

kubectl patch statefulset web -p '{"spec":{"replicas":"3"}}'

镜像更新

staefulSet也可以采用滚动更新策略,同样是修改pod template 属性后会触发更新,但是由于pod是有序的,在staefulset中更新时是基于pod的顺序倒序更新的

RolingUpdate (滚动更新)

灰度发布-金丝雀发布

利用RolingUpdate中的partition属性,可以实现简易的灰度发布的效果

ondelete (删除更新)

当pod删除后才会更新,否则不更新

删除StatefulSet和headless service即可

级联删除:删除StatefulSet时会同时删除pods

非级联删除:删除statefulSet时不会删除pods,删除sts后,pod不会删除(kubectl delete statefulSet  (sts name) --cascade=false)

11.DaemonSet:为每一个匹配的node部署一个守护进程

 DaemonSet会忽略Node的unschedulable状态,有两种方式来指定pod只运行在指定的Node节点上

nodeSelector:只调度到匹配指定label的Node上

nodeAffinity:功能更丰富的Node选择器,比如支持集合操作

podAffinity:调度到满足条件的pod所在的Node上

先在node节点上打标签

kubectl label nodes k8s-node1 svc_type=microsvc

然后在daemonSet配置设置nodeSelector

spec:

nodeSelector:

svc_type:microsvc

12.Horizontal Pod Autoscaler(HPA)

pod自动扩容:可以根据cpu使用率或自定义指标(metrics)自动对pod进行扩缩容

1、控制管理器每隔30s(可以通过horizontal-pod-autscaler-sync-period修改)查询metrics的资源使用情况

2、支持三种metrics类型

预定义metrics(比如pod的CPU)以利用率的方式计算

自定义的pod metrics,以原始值(raw value)的方式计算

自定义的object metrics

3、支持两种metrics查询方式:heapster和自定义的REST API

4、支持多种metrics

实现cpu或内存的监控,首先有个前提条件是该对象必须配置了resources.request.cpu或resources.requests.memory才可以,可以配置当cpu/memory达到上述配置的百分比后进行扩容或缩容

创建一个HPA:

1、先准备好一个有做资源限制的deployment

2、执行命令kubectl autoscale deploy < deployment name> --cpu-percent=20 --min=2 --max=5

3、通过kubectl get hpa可以获取HPA信息