yyz notes yyz notes
首页
  • RBAC权限设计
  • 架构图标设计
  • 账号体系
  • python基础
  • python高级
  • python模块
  • python设计模式
  • python数据结构与算法
  • django
  • django-DRF
  • flask
  • 直接设计开源pip包
  • 直接设计开源项目
  • python示例题/脚本
  • python面试题
  • golang基础
  • golang高级
  • golang常用组件
  • gin框架
  • es6
  • javascript
  • react
  • vue
  • TypeScript
  • mysql
  • redis
  • minio
  • elasticsearch
  • mongodb
  • 消息队列
  • 自动化测试
  • 操作系统

    • linux
    • windows
  • nginx
  • docker
  • k8s
  • git
  • ldap
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

益章

可乐鸡翅
首页
  • RBAC权限设计
  • 架构图标设计
  • 账号体系
  • python基础
  • python高级
  • python模块
  • python设计模式
  • python数据结构与算法
  • django
  • django-DRF
  • flask
  • 直接设计开源pip包
  • 直接设计开源项目
  • python示例题/脚本
  • python面试题
  • golang基础
  • golang高级
  • golang常用组件
  • gin框架
  • es6
  • javascript
  • react
  • vue
  • TypeScript
  • mysql
  • redis
  • minio
  • elasticsearch
  • mongodb
  • 消息队列
  • 自动化测试
  • 操作系统

    • linux
    • windows
  • nginx
  • docker
  • k8s
  • git
  • ldap
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • k8s

    • k8s基础
      • 链接资料
        • _常用命令_
        • _1、部署pod应用 YAML 文件方式_
        • _2、Service_
        • _3、StatefuSet_
        • _StatefulSet 特性_
        • _命名空间_
        • _job限制Pod的时长_
    • kubernets几种端口(port、targetport、contaierport、hostport、nodeport)的区别和关联
    • helm
  • 操作系统

  • nginx

  • docker

  • 运维部署
  • k8s
YiZhang-You
2023-05-24
目录

k8s基础

# k8s基础

# 链接资料

https://k8s.easydoc.net/docs/dRiQjyTY/28366845/6GiNOzyZ/nd7yOvdY (opens new window)

https://www.bilibili.com/video/BV1Tg411P7EB?p=2&spm_id_from=pageDriver&vd_source=5e49db0357b2bfad03172f1ac9f49df5 (opens new window)

# 常用命令

# 部署应用
kubectl apply -f app.yaml

# 查看 deployment 中所有的信息
kubectl get deployment

# 查看 pod
kubectl get pod -o wide

# 查看 pod 详情
kubectl describe pod pod-name
kubectl describe service/

# 查看 log  加-f实时查看  # tail -f app.log 实时查看app.log文件
kubectl logs pod-name

# 进入 Pod 容器终端, -c container-name 可以指定进入哪个容器。
kubectl exec -it pod-name -- bash

# 伸缩扩展副本,调整副本的数据,限制成5个 --replicas=5
kubectl scale deployment test-k8s --replicas=5

# 把集群内端口映射到节点,里面端口映射到外面端口
kubectl port-forward pod-name 8090:8080

# 查看历史
kubectl rollout history deployment test-k8s
# 回到上个版本
kubectl rollout undo deployment test-k8s
# 回到指定版本
kubectl rollout undo deployment test-k8s --to-revision=2
# 删除部署ku
kubectl delete deployment test-k8s

# 查看全部
kubectl get all
# 重新部署
kubectl rollout restart deployment test-k8s
# 命令修改镜像,--record 表示把这个命令记录到操作历史中
kubectl set image deployment test-k8s test-k8s=ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v2-with-error --record
# 暂停运行,暂停后,对 deployment 的修改不会立刻生效,恢复后才应用设置
kubectl rollout pause deployment test-k8s
# 恢复
kubectl rollout resume deployment test-k8s
# 输出到文件
kubectl get deployment test-k8s -o yaml >> app2.yaml
# 删除全部资源
kubectl delete all --all
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
  • minikube 只是一个 K8S 集群模拟器,只有一个节点的集群,只为测试用,master 和 worker 都在一起
启动命令
minikube start --kubernetes-version=v1.23.8

# 查看节点。kubectl 是一个用来跟 K8S 集群进行交互的命令行工具
kubectl get node

# 停止集群
minikube stop

# 清空集群
minikube delete --all

# 安装集群可视化 Web UI 控制台
minikube dashboard
1
2
3
4
5
6
7
8
9
10
11
12
13
14

https://github.com/gzyunke/test-k8s.git (opens new window)

# 1、部署pod应用 YAML 文件方式

方式一:

kubectl run testapp --image=ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v1
1

方式二:

 kubectl apply -f pod.yaml
1
# app.yaml  文件
apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  # 定义容器,可以多个
  containers:
    - name: test-k8s # 容器名字
      image: ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v1 # 镜像
1
2
3
4
5
6
7
8
9
10

方式三:deployment创建多个pod

Deployment 通过 label 关联起来 Pods

 kubectl apply -f pod.yaml
1
# app.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  # 部署名字
  name: test-k8s
spec:
  replicas: 2  # 2个pod
  # 用来查找关联的 Pod,所有标签都匹配才行
  selector:
    matchLabels:
      app: test-k8s
  # 定义 Pod 相关数据
  template:
    metadata:
      labels:
        app: test-k8s
    spec:
      # 定义容器,可以多个
      containers:
        - name: test-k8s # 容器名字
          image: ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v1 # 镜像
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 2、Service

特性

  • Service 通过 label 关联对应的 Pod

  • Servcie 生命周期不跟 Pod 绑定,不会因为 Pod 重创改变 IP

  • 提供了负载均衡功能,自动转发流量到不同 Pod

  • 可对集群外部提供访问端口

  • 集群内部可通过服务名字访问

其实就是通过service访问pod(因为pod要改变ip)service固定ip,通过service转发到pod提供负载均衡

创建pod,然后通过label和service关联上

# 3、StatefuSet

什么是 StatefulSet

StatefulSet 是用来管理有状态的应用,例如数据库。 前面我们部署的应用,都是不需要存储数据,不需要记住状态的,可以随意扩充副本,每个副本都是一样的,可替代的。 而像数据库、Redis 这类有状态的,则不能随意扩充副本。 StatefulSet 会固定每个 Pod 的名字

# StatefulSet 特性

  • Service 的 CLUSTER-IP 是空的,Pod 名字也是固定的。

  • Pod 创建和销毁是有序的,创建是顺序的,销毁是逆序的。

  • Pod 重建不会改变名字,除了IP,所以不要用IP直连

# 命名空间

如果一个集群中部署了多个应用,所有应用都在一起,就不太好管理,也可以导致名字冲突等。 我们可以使用 namespace 把应用划分到不同的命名空间,跟代码里的 namespace 是一个概念,只是为了划分空间。

# 创建命名空间
kubectl create namespace testapp
# 部署应用到指定的命名空间
kubectl apply -f app.yml --namespace testapp
# 查询命名空间下的所有pod
kubectl get pod --namespace kube-system

kubectl get ns  # 查看所有的命名空间
1
2
3
4
5
6
7
8

可以用 kubens (opens new window) 快速切换 namespace

# 切换命名空间
kubens kube-system
# 回到上个命名空间
kubens -
# 切换集群
kubectx minikube
1
2
3
4
5
6
apiVersion: v1
kind: Service
metadata:
  name: test-k8s
spec:
  selector:
    app: test-label-k8s
  # 默认 ClusterIP 集群内可访问,NodePort 节点可访问,LoadBalancer 负载均衡模式(需要负载均衡器才可用)
#  type: ClusterIP
#  type: NodePort
  type: NodePort
  ports:
    - port: 8080        # 本 Service 的端口
      targetPort: 8080  # 容器端口
#      nodePort: 31000   # 节点端口,范围固定 30000 ~ 32767

# 1、先执行上面的app.yaml文件创建pod,然后通过test-k8s标签连接
# 2、如果选择了NodePort,需要在下面加上nodePort端口,通过开放的31000端口访问
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
在整个的生命周期中,Pod会出现5种状态(相位),分别如下:

● 挂起(Pending):apiserver已经创建了pod资源对象,但他尚未被调度完成或者仍处于下载镜像的过程中。

● 运行中(Running):Pod已经被调度至某节点,并且所有容器都已经被kubectl创建完成

● 成功(Succeeded):Pod中的所有容器都已经成功终止并且不会重启

● 失败(Failed):所有容器都已经终止,但至少有一个容器终止失败,即容器返回了非0值得退出状态

● 未知(Unknown):apiServer无法正常获取到pod对象的状态信息,通常由网络通信失败所导致
————————————————
版权声明:本文为CSDN博主「Hud.」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42309691/article/details/124134236
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# job限制Pod的时长

apiVersion: batch/v1
kind: Job
metadata:
  name: job-2
#  namespace: gzqid
spec:
  backoffLimit: 0  # 重试0次
  activeDeadlineSeconds: 20  # 到达指定时长,Job 创建的所有的 Pod 都将被终止,然后下面的ttlSecondsAfterFinished就会删除job
  ttlSecondsAfterFinished: 0  # 则 TTL 控制器在 Job 执行结束后,立刻就可以清理该 Job 及其 Pod
  template:
    spec:
      containers:
      - name: pi
#        image: perl
#        image: ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v1
        image: xdasd123sad
#        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
编辑 (opens new window)
kubernets几种端口(port、targetport、contaierport、hostport、nodeport)的区别和关联

kubernets几种端口(port、targetport、contaierport、hostport、nodeport)的区别和关联→

最近更新
01
配置yun源
05-24
02
linux-配置python虚拟环境
05-24
03
linux文件目录管理
05-24
更多文章>
Theme by Vdoing | Copyright © 2023-2023 yizhang | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式