Kubernetes(k8s) 笔记总结(二)

时间:2023-01-13 19:50:36

提示:针对kubernetes的工作均衡学习。

1. Kubernetes 创建资源方式


k8s资源创建方式:

  • 命令行,直接通过k8s对应命令行进行创建。
  • YAML,通过yaml配置文件,然后在执行kubectl apply -y xxx来应用的方式。

Kubernetes(k8s) 笔记总结(二)

2. Kubernetes 操作NameSpace


名称空间:是对集群资源进行隔离划分。默认只隔离资源,不隔离网络。

Kubernetes(k8s) 笔记总结(二)

在dashboard中可以看到一些名称空间:
Kubernetes(k8s) 笔记总结(二)

方式一:通过命令行操作名称空间。

# 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

Kubernetes(k8s) 笔记总结(二)

3. Kubernetes的 Pod应用

3.1 Pod的 解释


k8s的pod就像docker中的容器。

Pod:一个Pod可以运行多个docker容器,Pod是kubernetes中应用的最小单位。

Kubernetes(k8s) 笔记总结(二)
Kubernetes(k8s) 笔记总结(二)
Kubernetes(k8s) 笔记总结(二)

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命令:
Kubernetes(k8s) 笔记总结(二)
之后,通过docker ps也能看到,毕竟本质还是docker容器:
Kubernetes(k8s) 笔记总结(二)

3.3 配置文件方式创建一个Pod


一个Pod创建的配置文件形式如下:

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: mynginx
  name: mynginx
#  namespace: default
spec:
  containers:
  - image: nginx
    name: mynginx
# 1. 应用配置文件,创建pod
kubectl apply -f pod.yaml
# 2. 删除对应pod
kubectl delete -f pod.yaml 

3.4 dashboard 可视化操作Pod


dashboard 操作如下:
Kubernetes(k8s) 笔记总结(二)
Kubernetes(k8s) 笔记总结(二)

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

Kubernetes(k8s) 笔记总结(二)

如果像进入Pod内部进行操作:

# 与docker的命令有点不同
kubectl exec -it mynginx -- /bin/bash

Kubernetes(k8s) 笔记总结(二)
Kubernetes(k8s) 笔记总结(二)
Kubernetes(k8s) 笔记总结(二)

3.6 Pod的 多容器操作


多容器的yaml配置如下操作:

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: myapp
  name: myapp
spec:
# 创建多个容器:
  containers:
  - image: nginx
    name: nginx
  - image: tomcat:8.5.68
    name: tomcat

Kubernetes(k8s) 笔记总结(二)

之后,等待下载完成即可:
Kubernetes(k8s) 笔记总结(二)


同样刚创建的Pod也会被分配IP,并且通过对应端口来进行访问:
Kubernetes(k8s) 笔记总结(二)


如果出现问题,可以通过logs日志查看:

  • 也可以kubectl logs通过命令行操作,查看问题。
    Kubernetes(k8s) 笔记总结(二)

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

Kubernetes(k8s) 笔记总结(二)
简而言之,就是不怕宕机,如果出现问题了,k8s的deployment会自动重新创建一个,也就是所谓的自愈能力。

4.2 Deployment的 多副本能力


deployment命令行添加:

# --replicas=3就是代表复制上三份,deployment的多副本效果。
kubectl create deployment my-dep --image=nginx --replicas=3

Kubernetes(k8s) 笔记总结(二)
dashboard添加:
Kubernetes(k8s) 笔记总结(二)

配置文件添加:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: my-dep
  name: my-dep
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-dep
  template:
    metadata:
      labels:
        app: my-dep
    spec:
      containers:
      - image: nginx
        name: nginx

4.3 Deployment的 扩缩容能力


Kubernetes(k8s) 笔记总结(二)

# 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来操作:
Kubernetes(k8s) 笔记总结(二)

4.4 Deployment的 自愈&故障转移能力


自愈:
Kubernetes(k8s) 笔记总结(二)
故障转移:
Kubernetes(k8s) 笔记总结(二)

提示:

# -w 参数也是监控 , 这个监控是k8s提供的
kubectl get pod -w

4.5 Deployment的 滚动更新


Kubernetes(k8s) 笔记总结(二)

简而言之,就是开一个新版本,等新版本启动成功后,就杀死老版本。这样就完成了版本的迭代了。也就是不停机维护的效果。

# 可以查看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

Kubernetes(k8s) 笔记总结(二)

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也能操作:
Kubernetes(k8s) 笔记总结(二)