管理K8S核心资源三种基本方法:
- 陈述式管理方法:主要依赖命令行CLI工具进行管理
- 声明式管理方法:主要依赖资源配置清单(manifest)进行管理
- GUI式管理方法:主要依赖图形化操作界面(web页面)进行管理
1.1 陈述式资源管理方法
1.1.1 管理名称空间资源
查看名称空间
[root@k8s-21 ~]# kubectl get namespace # 集群安装后,会默认生成几个空间[root@k8s-21 ~]# kubectl get ns # 很多核心组件是可以用简称的,如namespace,可以用ns
查看名称空间内的资源
查询k8s集群资源的时候,要带上名称空间,因为不同名称空间的资源是允许重名的
查看默认名称空间资源
[root@k8s-21 ~]# kubectl get all -n default # 指定名称空间[root@k8s-21 ~]# kubectl get all # 查询默认空间也可以去掉 -n default
创建名称空间
[root@k8s-21 ~]# kubectl create ns appnamespace/app created[root@k8s-21 ~]# kubectl get nsNAME STATUS AGEapp Active 4sdefault Active 4dkube-node-lease Active 4dkube-public Active 4dkube-system Active 4d
删除名称空间
[root@k8s-21 ~]# kubectl delete ns appnamespace "app" deleted[root@k8s-21 ~]# kubectl get nsNAME STATUS AGEdefault Active 4dkube-node-lease Active 4dkube-public Active 4dkube-system Active 4d
1.1.2 管理Deployment资源
deployment就是控制器
创建deployment
# 在kube-public名称空间下创建名为nginx-dp的deployment[root@k8s-21 ~]# kubectl create deployment nginx-dp --image=harbor.od.com/public/nginx:v1.7.9 -n kube-public
查看deployment
# 查看kube-public下的资源[root@k8s-21 ~]# kubectl get all -n kube-public# 查看kube-public下的控制器[root@k8s-21 ~]# kubectl get deploy -n kube-public# 扩展查看deploy信息[root@k8s-21 ~]# kubectl get deployment -o wide -n kube-public# 详细查看[root@k8s-21 ~]# kubectl describe deployment nginx-dp -n kube-public1.Name:该deploy名称2.Namespace:deploy所处的名称空间3.CreationTimestamp:创建时间4.Labels:创建deploymengt会默认指定一个lable5.Annotations:键值对方式注解6.Selector:标签选择器7.Replicas:副本集,可以根据这些指标看pod是否正常8.StrategyType:更新策略、发布策略有四种概念的发布策略:蓝绿发布、滚动发布、灰度发布、金丝雀发布k8s中默认的发布策略是滚动发布
查看pod资源
# 查看kube-public下运行的pod[root@k8s-21 ~]# kubectl get pods -n kube-public# 扩展查看pod信息[root@k8s-21 ~]# kubectl get pods -n kube-public -o wide
进入pod资源
# 进入pod资源[root@k8s-21 ~]# kubectl get pods -n kube-publicNAME READY STATUS RESTARTS AGEnginx-dp-5dfc689474-sg6rc 1/1 Running 0 32m[root@k8s-21 ~]# kubectl exec -it nginx-dp-5dfc689474-sg6rc /bin/bash -n kube-publicroot@nginx-dp-5dfc689474-sg6rc:/# ip add# 还可以使用docker进入[root@k8s-21 ~]# docker exec -it nginx-dp-5dfc689474-sg6rc bash
删除pod资源(重启)
单单删除pod,还会再创建一个新的pod,就类似重启pod[root@k8s-21 ~]# kubectl delete pod nginx-dp-5dfc689474-sg6rc -n kube-public[root@k8s-21 ~]# kubectl get pods -n kube-public -o wide # 再查看,是一个新的pod## 预选策略是将pod分配到空闲的节点上## 预选策略源码:https://github.com/kubernetes/kubernetes/tree/master/pkg/scheduler
- 使用watch观察pod重建状态变化
- 强制删除参数:—force —grace-period=0
删除deployment
[root@k8s-21 ~]# kubectl get deploy -n kube-publicNAME READY UP-TO-DATE AVAILABLE AGEnginx-dp 1/1 1 1 165m[root@k8s-21 ~]# kubectl delete deploy nginx-dp -n kube-public
1.1.3 管理Service资源
创建service
核心资源:pod、pod controller、service、ingress(掌握着四种核心资源就能处理80%kubernetes问题)
# 创建deployment[root@k8s-21 ~]# kubectl create deployment nginx-dp --image=harbor.od.com/public/nginx:v1.7.9 -n kube-public[root@k8s-21 ~]# kubectl get all -n kube-public# 创建service,得到service-IP[root@k8s-21 ~]# kubectl expose deployment nginx-dp --port=80 -n kube-public# 跟之前先比,多了service信息,Cluster-IP就是pod的固定接入点,端口是80[root@k8s-21 ~]# kubectl get all -n kube-publicNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/nginx-dp ClusterIP 192.168.176.81 <none> 80/TCP[root@k8s-21 ~]# kubectl get pods -n kube-public -o wide # 先查看pod是在哪台节点上运行[root@k8s-22 ~]# curl 192.168.176.81 # pod是运行在22节点上,到22节点上curl Cluster-IP查看# 再将pod扩容[root@k8s-22 ~]# kubectl scale deployment nginx-dp --replicas=2 -n kube-public# 可以看到,pod增多了,但是service IP都是不变的,都是service IP代理后来pod的IP[root@k8s-21 ~]# ipvsadm -LnTCP 192.168.176.81:80 nq-> 172.7.21.5:80 Masq 1 0 0-> 172.7.22.5:80 Masq 1 0 0# 再缩容为1,再去查看IP代理情况,一样道理[root@k8s-22 ~]# kubectl scale deployment nginx-dp --replicas=1 -n kube-public
查看service
[root@k8s-21 ~]# kubectl get svc -n kube-publicNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEnginx-dp ClusterIP 192.168.176.81 <none> 80/TCP 29m# 详细查看[root@k8s-21 ~]# kubectl describe svc nginx-dp -n kube-publicName: nginx-dpNamespace: kube-publicLabels: app=nginx-dpAnnotations: <none>Selector: app=nginx-dp # 通过标签选择器,将pod和service关联起来Type: ClusterIPIP: 192.168.176.81 # 集群网络Port: <unset> 80/TCPTargetPort: 80/TCPEndpoints: 172.7.22.5:80Session Affinity: NoneEvents: <none>
1.1.4 kubernetes用法总结
1.2 声明式资源管理方法
声明式资源管理方法依赖于——资源配置清单(yaml/json)
查看资源配置清单
# 查看service的资源配置清单[root@k8s-21 ~]# kubectl get svc nginx-dp -o yaml -n kube-public# 查看pod的资源配置清单[root@k8s-21 ~]# kubectl get pods nginx-dp-5dfc689474-pgn5l -o yaml -n kube-public
解释资源配置清单
[root@k8s-21 ~]# kubectl explain service[root@k8s-21 ~]# kubectl explain service.metadata # 特意查看哪个段
创建资源配置清单
~]# vi /root/nginx-ds-svc.yaml
应用资源配置清单
~]# kubectl apply -f nginx-ds-svc.yaml~]# 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
总结:
增删查用 陈述式改用 声明式
命令
kubectl [command] [TYPE] [NAME] [flags]command: 操作create,get,describe,deleteTYPE: 指定操作的资源类型NAME: 指定资源名称,如忽略则默认命名空间下所有同类资源flags: 命令行选型,如覆盖默认服务器地址,端口,输出样式等
kubectl cluster-info 查看集群信息
kubectl version 显示kubectl命令行及kube服务端的版本
kubectl api-version 显示支持的API版本集合
kubectl config view 显示当前kubectl配置
kubectl get no 查看集群中节点
kubectl create -f
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存储的主要应⽤场景
- 应⽤程序/服务存储状态、数据存取等
- 应⽤程序/服务配置⽂件读取、秘钥配置等
- 不同应⽤程序间或者应⽤程序内进程间共享数据
