提示:针对kubernetes的工作均衡学习。
文章目录
- 1. Kubernetes 创建资源方式
- 2. Kubernetes 操作NameSpace
- 3. Kubernetes的 Pod应用
- 3.1 Pod的 解释
- 3.2 通过命令行来创建一个pod
- 3.3 配置文件方式创建一个Pod
- 3.4 dashboard 可视化操作Pod
- 3.5 针对Pod的一些细节操作
- 3.6 Pod的 多容器操作
- 4. Kubernetes的 使用Deployment部署应用
- 4.1 Deployment的 作用 和 自愈
- 4.2 Deployment的 多副本能力
- 4.3 Deployment的 扩缩容能力
- 4.4 Deployment的 自愈&故障转移能力
- 4.5 Deployment的 滚动更新
- 4.6 Deployment的 版本回退
- 5. Kubernetes的 工作负载
1. Kubernetes 创建资源方式
k8s资源创建方式:
- 命令行,直接通过k8s对应命令行进行创建。
- YAML,通过yaml配置文件,然后在执行kubectl apply -y xxx来应用的方式。
2. Kubernetes 操作NameSpace
名称空间:是对集群资源进行隔离划分。默认只隔离资源,不隔离网络。
在dashboard中可以看到一些名称空间:
方式一:通过命令行操作名称空间。
# 1. 查看名称空间
kubectl get ns# 2. 查看pod应用对应的名称空间
kubectl get pods -A
# 不带参数A仅仅查询default默认名称空间的内容。
kubectl get pods
# -n参数:指定名称,仅查看对应name的pod应用信心。# 3. 创建名称空间:
kubectl create ns xxx
# 4. 删除名称空间:
kubectl delete ns xxx
方式二:使用yaml配置文件创建。
创建一个名称空间的yaml文件配置,如下:
- 之后通过
kubectl apply -y xxx.yaml
apiVersion: v1
kind: Namespace
metadata:name: hello
删除方式有两种:
# 1. 通过delete ns来命令删除
kubectl delete ns xxx
# 2. 通过delete -f 依据对应配置文件进行删除。
kubectl delete -f xxx.yaml
3. Kubernetes的 Pod应用
3.1 Pod的 解释
k8s的pod就像docker中的容器。
Pod:一个Pod可以运行多个docker容器,Pod是kubernetes中应用的最小单位。
3.2 通过命令行来创建一个pod
# 1. 通过命令行创建一个pod应用(默认创建在了默认名称空间)
kubectl run mynginx --image=nginx# 2. 查看default名称空间的Pod
kubectl get pod
# 3. 查看pod的描述
kubectl describe pod Pod名字
# 4. 删除某名称空间下的pod,默认是default名称空间。
kubectl delete pod Pod名字 -n defautl
# 也可以删除多个。# 5. 查看Pod的运行日志
kubectl logs Pod名字
kubectl describe命令:
之后,通过docker ps也能看到,毕竟本质还是docker容器:
3.3 配置文件方式创建一个Pod
一个Pod创建的配置文件形式如下:
apiVersion: v1
kind: Pod
metadata:labels:run: mynginxname: mynginx
# namespace: default
spec:containers:- image: nginxname: mynginx
# 1. 应用配置文件,创建pod
kubectl apply -f pod.yaml
# 2. 删除对应pod
kubectl delete -f pod.yaml
3.4 dashboard 可视化操作Pod
dashboard 操作如下:
3.5 针对Pod的一些细节操作
可以通过以下命令进行更加详细的操作和测试:
# 假如:已经添加了一个nginx镜像的pod
# 1. 查看pod应用列表,对应的更加详细的信息(尤其是IP地址)
kubectl get pod -owide
# NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
# mynginx 1/1 Running 0 85s 192.168.36.69 k8s-node1 <none> <none> # 2. 使用Pod的ip+pod里面运行容器的端口就可以进行访问(nginx默认就是80)
curl 192.168.36.69
# 集群中的任意一个机器以及任意的应用都能通过Pod分配的ip来访问这个Pod
如果像进入Pod内部进行操作:
# 与docker的命令有点不同
kubectl exec -it mynginx -- /bin/bash
3.6 Pod的 多容器操作
多容器的yaml配置如下操作:
apiVersion: v1
kind: Pod
metadata:labels:run: myappname: myapp
spec:
# 创建多个容器:containers:- image: nginxname: nginx- image: tomcat:8.5.68name: tomcat
之后,等待下载完成即可:
同样刚创建的Pod也会被分配IP,并且通过对应端口来进行访问:
如果出现问题,可以通过logs日志查看:
- 也可以kubectl logs通过命令行操作,查看问题。
4. Kubernetes的 使用Deployment部署应用
4.1 Deployment的 作用 和 自愈
Deployment部署的作用:控制Pod,使Pod拥有多副本、自愈、扩缩容等能力。
# 1. 创建一个Pod
kubectl run mynginx --image=nginx
# 2. 创建一个应用deployment部署。部署的名字叫做:mytomcat
kubectl create deployment mytomcat --image=tomcat:8.5.68
# 创建一个部署后,部署会自动创建一个Pod# 3. 测试监听命令可以使用如下:
watch -n 1 kubectl get pod # 来监听删除效果。# 4. 只有删除对应的deployment部署,才行
kubectl delete deploy mytomcat
简而言之,就是不怕宕机,如果出现问题了,k8s的deployment会自动重新创建一个,也就是所谓的自愈能力。
4.2 Deployment的 多副本能力
deployment命令行添加:
# --replicas=3就是代表复制上三份,deployment的多副本效果。
kubectl create deployment my-dep --image=nginx --replicas=3
dashboard添加:
配置文件添加:
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: my-depname: my-dep
spec:replicas: 3selector:matchLabels:app: my-deptemplate:metadata:labels:app: my-depspec:containers:- image: nginxname: nginx
4.3 Deployment的 扩缩容能力
# 1. 先部署3个
kubectl create deployment my-dep --image=nginx --replicas=3
# 2. 扩容到5个
kubectl scale --replicas=5 deployment/my-dep
# 3. 缩容到3个
kubectl scale --replicas=2 deploy/my-dep
还可以通过修改deploy部署配置文件来实现扩容、缩容:
# 通过修改配置文件来操作
kubectl edit deploy my-dep
还可以通过dashboard来操作:
4.4 Deployment的 自愈&故障转移能力
自愈:
故障转移:
提示:
# -w 参数也是监控 , 这个监控是k8s提供的
kubectl get pod -w
4.5 Deployment的 滚动更新
简而言之,就是开一个新版本,等新版本启动成功后,就杀死老版本。这样就完成了版本的迭代了。也就是不停机维护的效果。
# 可以查看yaml文件的一个配置
kubectl get deploy my-dep -oyaml
# 通过使用set来进行版本更新
kubectl set image deployment/my-dep nginx=nginx:1.16.1 --record
# 查看set版本更新是否成功
kubectl rollout status deployment/my-dep
4.6 Deployment的 版本回退
# 1. 查看版本的 历史记录
kubectl rollout history deployment/my-dep# 2. 查看某个历史详情
kubectl rollout history deployment/my-dep --revision=2# 3. 回滚(回到上次)
kubectl rollout undo deployment/my-dep# 4. 回滚(回到指定版本)
kubectl rollout undo deployment/my-dep --to-revision=2
回滚也是一个滚动更新的过程。
5. Kubernetes的 工作负载
除了Deployment,k8s还有 StatefulSet 、DaemonSet 、Job 等 类型资源。我们都称为 工作负载。
Deployment:无状态应用部署,例如:微服务,提供多副本等功能。
无状态可以理解为没有数据存储的效果。
StatefulSet:有状态应用部署,例如:redis,mysql,提供稳定的存储、网络等功能。
有状态可以理解有稳定存储等效果的。
DaemonSet:守护型应用部署,例如:日志收集组件,每个机器都要运行。有且仅有一份。
Job/CronJob:定时任务部署,例如:垃圾清理组件,可以在执行时间运行。
官方地址:https://kubernetes.io/zh/docs/concepts/workloads/controllers/
在dashboard也能操作: