管理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 app
namespace/app created
[root@k8s-21 ~]# kubectl get ns
NAME STATUS AGE
app Active 4s
default Active 4d
kube-node-lease Active 4d
kube-public Active 4d
kube-system Active 4d
删除名称空间
[root@k8s-21 ~]# kubectl delete ns app
namespace "app" deleted
[root@k8s-21 ~]# kubectl get ns
NAME STATUS AGE
default Active 4d
kube-node-lease Active 4d
kube-public Active 4d
kube-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-public
1.Name:该deploy名称
2.Namespace:deploy所处的名称空间
3.CreationTimestamp:创建时间
4.Labels:创建deploymengt会默认指定一个lable
5.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-public
NAME READY STATUS RESTARTS AGE
nginx-dp-5dfc689474-sg6rc 1/1 Running 0 32m
[root@k8s-21 ~]# kubectl exec -it nginx-dp-5dfc689474-sg6rc /bin/bash -n kube-public
root@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-public
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-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-public
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/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 -Ln
TCP 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-public
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-dp ClusterIP 192.168.176.81 <none> 80/TCP 29m
# 详细查看
[root@k8s-21 ~]# kubectl describe svc nginx-dp -n kube-public
Name: nginx-dp
Namespace: kube-public
Labels: app=nginx-dp
Annotations: <none>
Selector: app=nginx-dp # 通过标签选择器,将pod和service关联起来
Type: ClusterIP
IP: 192.168.176.81 # 集群网络
Port: <unset> 80/TCP
TargetPort: 80/TCP
Endpoints: 172.7.22.5:80
Session Affinity: None
Events: <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,delete
TYPE: 指定操作的资源类型
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存储的主要应⽤场景
- 应⽤程序/服务存储状态、数据存取等
- 应⽤程序/服务配置⽂件读取、秘钥配置等
- 不同应⽤程序间或者应⽤程序内进程间共享数据