1.操作namespace
kubectl create ns hello
kubectl delete ns hello#yaml
apiVersion: v1
kind: Namespace
metadata:
name: hello2.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: mynginx4.查看pod运行日志
kubectl logs pod5.查看k8s分配的pod的ip是多少
kubectl get pod -owide6.进入容器里面修改
kubectl exec -it mynginx -- /bin/bash7.一个pod运行多个容器
apiVersion: v1
kind: Pod
metadata:
labels:
run: myapp
name:
spec:
containers:
- images: nginx
- name: nginx
- images: tomcat:8.5.69
- name: tomcat8. 查看pod异常排错,描述
kubectl describe pod redis9.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文件也可以实现多副本

扩缩容能力
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信息
















