管理K8S核心资源三种基本方法:

  • 陈述式管理方法:主要依赖命令行CLI工具进行管理
  • 声明式管理方法:主要依赖资源配置清单(manifest)进行管理
  • GUI式管理方法:主要依赖图形化操作界面(web页面)进行管理

1.1 陈述式资源管理方法

1.1.1 管理名称空间资源

查看名称空间

  1. [root@k8s-21 ~]# kubectl get namespace # 集群安装后,会默认生成几个空间
  2. [root@k8s-21 ~]# kubectl get ns # 很多核心组件是可以用简称的,如namespace,可以用ns

查看名称空间内的资源

查询k8s集群资源的时候,要带上名称空间,因为不同名称空间的资源是允许重名的

查看默认名称空间资源

  1. [root@k8s-21 ~]# kubectl get all -n default # 指定名称空间
  2. [root@k8s-21 ~]# kubectl get all # 查询默认空间也可以去掉 -n default

创建名称空间

  1. [root@k8s-21 ~]# kubectl create ns app
  2. namespace/app created
  3. [root@k8s-21 ~]# kubectl get ns
  4. NAME STATUS AGE
  5. app Active 4s
  6. default Active 4d
  7. kube-node-lease Active 4d
  8. kube-public Active 4d
  9. kube-system Active 4d

删除名称空间

  1. [root@k8s-21 ~]# kubectl delete ns app
  2. namespace "app" deleted
  3. [root@k8s-21 ~]# kubectl get ns
  4. NAME STATUS AGE
  5. default Active 4d
  6. kube-node-lease Active 4d
  7. kube-public Active 4d
  8. kube-system Active 4d

1.1.2 管理Deployment资源

deployment就是控制器

创建deployment

  1. # 在kube-public名称空间下创建名为nginx-dp的deployment
  2. [root@k8s-21 ~]# kubectl create deployment nginx-dp --image=harbor.od.com/public/nginx:v1.7.9 -n kube-public

查看deployment

  1. # 查看kube-public下的资源
  2. [root@k8s-21 ~]# kubectl get all -n kube-public
  3. # 查看kube-public下的控制器
  4. [root@k8s-21 ~]# kubectl get deploy -n kube-public
  5. # 扩展查看deploy信息
  6. [root@k8s-21 ~]# kubectl get deployment -o wide -n kube-public
  7. # 详细查看
  8. [root@k8s-21 ~]# kubectl describe deployment nginx-dp -n kube-public
  9. 1.Name:该deploy名称
  10. 2.Namespacedeploy所处的名称空间
  11. 3.CreationTimestamp:创建时间
  12. 4.Labels:创建deploymengt会默认指定一个lable
  13. 5.Annotations:键值对方式注解
  14. 6.Selector:标签选择器
  15. 7.Replicas:副本集,可以根据这些指标看pod是否正常
  16. 8.StrategyType:更新策略、发布策略
  17. 有四种概念的发布策略:蓝绿发布、滚动发布、灰度发布、金丝雀发布
  18. k8s中默认的发布策略是滚动发布

查看pod资源

  1. # 查看kube-public下运行的pod
  2. [root@k8s-21 ~]# kubectl get pods -n kube-public
  3. # 扩展查看pod信息
  4. [root@k8s-21 ~]# kubectl get pods -n kube-public -o wide

进入pod资源

  1. # 进入pod资源
  2. [root@k8s-21 ~]# kubectl get pods -n kube-public
  3. NAME READY STATUS RESTARTS AGE
  4. nginx-dp-5dfc689474-sg6rc 1/1 Running 0 32m
  5. [root@k8s-21 ~]# kubectl exec -it nginx-dp-5dfc689474-sg6rc /bin/bash -n kube-public
  6. root@nginx-dp-5dfc689474-sg6rc:/# ip add
  7. # 还可以使用docker进入
  8. [root@k8s-21 ~]# docker exec -it nginx-dp-5dfc689474-sg6rc bash

删除pod资源(重启)

  1. 单单删除pod,还会再创建一个新的pod,就类似重启pod
  2. [root@k8s-21 ~]# kubectl delete pod nginx-dp-5dfc689474-sg6rc -n kube-public
  3. [root@k8s-21 ~]# kubectl get pods -n kube-public -o wide # 再查看,是一个新的pod
  4. ## 预选策略是将pod分配到空闲的节点上
  5. ## 预选策略源码:https://github.com/kubernetes/kubernetes/tree/master/pkg/scheduler
  • 使用watch观察pod重建状态变化
  • 强制删除参数:—force —grace-period=0

删除deployment

  1. [root@k8s-21 ~]# kubectl get deploy -n kube-public
  2. NAME READY UP-TO-DATE AVAILABLE AGE
  3. nginx-dp 1/1 1 1 165m
  4. [root@k8s-21 ~]# kubectl delete deploy nginx-dp -n kube-public

1.1.3 管理Service资源

创建service

核心资源:pod、pod controller、service、ingress(掌握着四种核心资源就能处理80%kubernetes问题)

  1. # 创建deployment
  2. [root@k8s-21 ~]# kubectl create deployment nginx-dp --image=harbor.od.com/public/nginx:v1.7.9 -n kube-public
  3. [root@k8s-21 ~]# kubectl get all -n kube-public
  4. # 创建service,得到service-IP
  5. [root@k8s-21 ~]# kubectl expose deployment nginx-dp --port=80 -n kube-public
  6. # 跟之前先比,多了service信息,Cluster-IP就是pod的固定接入点,端口是80
  7. [root@k8s-21 ~]# kubectl get all -n kube-public
  8. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  9. service/nginx-dp ClusterIP 192.168.176.81 <none> 80/TCP
  10. [root@k8s-21 ~]# kubectl get pods -n kube-public -o wide # 先查看pod是在哪台节点上运行
  11. [root@k8s-22 ~]# curl 192.168.176.81 # pod是运行在22节点上,到22节点上curl Cluster-IP查看
  12. # 再将pod扩容
  13. [root@k8s-22 ~]# kubectl scale deployment nginx-dp --replicas=2 -n kube-public
  14. # 可以看到,pod增多了,但是service IP都是不变的,都是service IP代理后来pod的IP
  15. [root@k8s-21 ~]# ipvsadm -Ln
  16. TCP 192.168.176.81:80 nq
  17. -> 172.7.21.5:80 Masq 1 0 0
  18. -> 172.7.22.5:80 Masq 1 0 0
  19. # 再缩容为1,再去查看IP代理情况,一样道理
  20. [root@k8s-22 ~]# kubectl scale deployment nginx-dp --replicas=1 -n kube-public

查看service

  1. [root@k8s-21 ~]# kubectl get svc -n kube-public
  2. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  3. nginx-dp ClusterIP 192.168.176.81 <none> 80/TCP 29m
  4. # 详细查看
  5. [root@k8s-21 ~]# kubectl describe svc nginx-dp -n kube-public
  6. Name: nginx-dp
  7. Namespace: kube-public
  8. Labels: app=nginx-dp
  9. Annotations: <none>
  10. Selector: app=nginx-dp # 通过标签选择器,将pod和service关联起来
  11. Type: ClusterIP
  12. IP: 192.168.176.81 # 集群网络
  13. Port: <unset> 80/TCP
  14. TargetPort: 80/TCP
  15. Endpoints: 172.7.22.5:80
  16. Session Affinity: None
  17. Events: <none>

1.1.4 kubernetes用法总结

1.2 声明式资源管理方法

声明式资源管理方法依赖于——资源配置清单(yaml/json)

查看资源配置清单

  1. # 查看service的资源配置清单
  2. [root@k8s-21 ~]# kubectl get svc nginx-dp -o yaml -n kube-public
  3. # 查看pod的资源配置清单
  4. [root@k8s-21 ~]# kubectl get pods nginx-dp-5dfc689474-pgn5l -o yaml -n kube-public

解释资源配置清单

  1. [root@k8s-21 ~]# kubectl explain service
  2. [root@k8s-21 ~]# kubectl explain service.metadata # 特意查看哪个段

创建资源配置清单

  1. ~]# vi /root/nginx-ds-svc.yaml

应用资源配置清单

  1. ~]# kubectl apply -f nginx-ds-svc.yaml
  2. ~]# kubectl create -f nginx-ds-svc.yaml

修改资源配置清单并应用

  • 在线修改

    • 直接使用kubectl edit service nginx-ds 在线编辑资源配置清单并保存生效
  • 离线修改

    • 修改nginx-ds-svc.yaml文件,并用kubectl apply -f nginx-ds-svc.yaml文件使之生效

删除资源配置清单

  • 陈述式删除

    • kubectl delete service nginx-ds -n kube-public
  • 声明式删除

    • kubectl delete -f nginx-ds-svc.yaml

总结:

  1. 增删查用 陈述式
  2. 改用 声明式

命令

  1. kubectl [command] [TYPE] [NAME] [flags]
  2. command: 操作creategetdescribedelete
  3. TYPE: 指定操作的资源类型
  4. NAME: 指定资源名称,如忽略则默认命名空间下所有同类资源
  5. flags: 命令行选型,如覆盖默认服务器地址,端口,输出样式等

kubectl cluster-info 查看集群信息

kubectl version 显示kubectl命令行及kube服务端的版本

kubectl api-version 显示支持的API版本集合

kubectl config view 显示当前kubectl配置

kubectl get no 查看集群中节点

kubectl create -f 按照yaml文件创建资源

kubectl run —image= 使用某镜像创建Deployment

kubernetes命令行—-检查与调试

kubectl get 查看某种类型资源

kubectl describe 检查某特定资源实例

kubectl logs 检查某POD的日志(标准输出)

kubectl exec 在容器内执行命令

kubernetes命令行—-部署管理

kubectl scale 实现水平扩展或收缩

kubectl rollout status 部署状态变更状态检查

kubectl rollout history 部署的历史

kubectl rollout undo 回滚部署到最近或者某个版本

kubernetes命令行—-删除资源

kubectl delete

kubernetes命令行—-Live Demo

集群状态查看 检查集群中节点状态和Kube的功能集

创建nginx的Deploy 部署一个nginx的单实例

检查Deploy 查看该部署的运行状况

服务发现 如何从外部访问

部署管理 水平扩展或收缩实例以及滚动升级和回滚

删除资源 释放不再需要的资源

kubernetes网络

容器网络

  • 每个pod分配单独的ip地址
  • 使用networkPolicy实现访问控制

负载均衡(Service IP)

  • 内部的虚拟Ip映射到后端多个容器

外部访问

  • 外部负载均衡
  • ingress的反向代理

Kubernetes存储

K8s存储的主要应⽤场景

  • 应⽤程序/服务存储状态、数据存取等
  • 应⽤程序/服务配置⽂件读取、秘钥配置等
  • 不同应⽤程序间或者应⽤程序内进程间共享数据

Kubernetes日志存储

Kubernetes应用部署