k8s详解

一、k8s中的yaml文件

  • JSON格式:主要用于api接口之间信息的传递
  • YAML格式:主要用于配置和管理,YAML是一种简洁的非标记性语言,内容格式人性化

YAML格式:

  • 大小写敏感
  • 使用缩进代表层级关系,不支持TAB制表符缩进,只使用空格缩进
  • 缩进的空格数目不重要,只要相同层级额元素左侧对齐即可,通常开头缩进两个空格
  • 字符后缩进一个空格,如冒号,逗号,短横杆等
  • "---"表示YAML格式,一个文件的开始,用于分割文件
  • # 表示注释

apiVersion

如果是业务场景,一般首选使用apps/v1

带有beta字样的代表的是测试版本,不用于生产环境

[root@k8s-1 test]# kubectl api-versions
admissionregistration.k8s.io/v1
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1beta1
coordination.k8s.io/v1
coordination.k8s.io/v1beta1
discovery.k8s.io/v1beta1
events.k8s.io/v1beta1
extensions/v1beta1
networking.k8s.io/v1
networking.k8s.io/v1beta1
node.k8s.io/v1beta1
policy/v1beta1
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1
scheduling.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1

二、写一个YAML文件

可以直接通过 -o yaml 命令导出一个模板,

kubectl get deployments nginx-test1 -0 yaml > /opt/demo/nginx-demo1.yaml

三、常用命令

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

# 查看deployment
kubectl get deployment -nasp -owide

# 查看pod
kubectl get pod -n asp -owide

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

# 查看log
kubectl logs pod-name

# 进入容器终端,-c container-name 可以指定进入哪个容器
kubectl exec -it webguard-app-deployment-994fcf6c5-2gdjn -ngalaxy-asp -- /bin/bash
docker exec -it container_name /bin/bash

# 伸缩扩展副本
kubectl scale deployment test-k8s --replicas=5

# 把集群内部的端口映射到节点,直接将pod的节点映射出来
kubectl port-forward test-k8s-xxxx 8080:8080

# 查看历史版本
kubectl rollout history deployment test-k8s -nasp

# 回退上一个版本
kubectl rollout undo deployment test-k8s

# 回到指定版本
kubectl rollout undo deployment test-k8s --to-revision=2

# 删除部署
kubectl delete -f deployment test-k8s
或者
进入deployment文件目录
kubectl delete -f test-k8s-deployment.yaml

# 查看部署的名字
kubectl get deployment

# 查看全部
kubectl get all

# 重新部署
kubectl rollout restart deployment test-k8s

# 暂停运行,暂停后,对deployment的修改不会立即生效,而是等到恢复后才应用
kubectl rollout pause deployment test-k8s

# 恢复
kubectl rollout resume deployment test-k8s

# 输出到yaml文件
kubectl get deployment test-k8s -o yaml >> app2.yaml

# 删除所有资源
kubectl delete all --all

四、有状态的服务statefulset

statefulset 是用来管理有状态的应用,如数据库

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

使用服务只能通过service名称进行调用

配置有状态的MongoDB

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mongodb
spec:
  serviceName: mongodb
  replicas: 3
  selector:
    matchLabels:
      app: mongodb
  template:
    metadata:
      labels:
        app: mongodb
    spec:
      containers:
        - name: mongo
          image: mongo:4.4
          # IfNotPresent 仅本地没有镜像时才远程拉,Always 永远都是从远程拉,Never 永远只用本地镜像,本地没有则报错
          imagePullPolicy: IfNotPresent
---
apiVersion: v1
kind: Service
metadata:
  name: mongodb
spec:
  selector:
    app: mongodb
  type: ClusterIP
  # HeadLess
  clusterIP: None
  ports:
    - port: 27017
      targetPort: 27017

kubectl get pod

[root@k8s-1 statefulset]# kubectl get pod
NAME        READY   STATUS    RESTARTS   AGE
mongodb-0   1/1     Running   0          5m41s
mongodb-1   1/1     Running   0          5m7s
mongodb-2   1/1     Running   0          4m23s

kubectl get svc

[root@k8s-1 statefulset]# kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)     AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP     64m
mongodb      ClusterIP   None         <none>        27017/TCP   5m47s

五、数据持久化

kubernetes 集群不会为你处理数据的存储,我们可以为数据库挂载一个磁盘来确保数据的安全。
你可以选择云存储、本地磁盘、NFS。

  • 本地磁盘:可以挂载某个节点上的目录,但是这需要限定 pod 在这个节点上运行
  • 云存储:不限定节点,不受集群影响,安全稳定;需要云服务商提供,裸机集群是没有的。
  • NFS:不限定节点,不受集群影响

hostpath挂载示例

把节点上的一个目录挂载到pod,不推荐使用

配置方式简单,需要手动指定pod跑在某个固定的节点仅供单节点测试,不适用于多节点集群

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mongodb
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mongodb
  template:
    metadata:
      labels:
        app: mongodb
    spec:
      containers:
        - name: mongo
          image: mongo:4.4
          # IfNotPresent 仅本地没有镜像时才远程拉,Always 永远都是从远程拉,Never 永远只用本地镜像,本地没有则报错
          imagePullPolicy: IfNotPresent
          volumeMounts:
            - mountPath: /data/db # 容器里面的挂载路径
              name: mongo-data    # 卷名字,必须跟下面定义的名字一致
      volumes:
        - name: mongo-data              # 卷名字
          hostPath:
            path: /data/mongo-data      # 节点上的路径
            type: DirectoryOrCreate     # 指向一个目录,不存在时自动创建

六、endpoint

endpoint是k8s集群中的一个资源对象,存储在etcd里面,用来记录一个service对应的所有pod的访问地址

同时,也可以引入外部服务,使得 k8s能够访问外部有状态的服务,比如db等

example:

1、创建一个endpoint,引入外部服务

http-endpoint.yaml

apiVersion: v1
kind: Endpoints
metadata:
  name: http
  namespace: asp
subsets:
- addresses:
  - ip: 101.34.182.36  # 外部服务的ip
  ports:
  - name: http
    port: 5001  # 外部服务的port
    protocol: TCP  # 网络协议类型
# 多个ip,多个addresses
#- addresses:
#  - ip: 101.34.182.36  # 外部服务的ip
#  ports:
#  - name: http
#    port: 5001  # 外部服务的port
#    protocol: TCP  # 网络协议类型

http-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: http
  namespace: asp
spec:
  ports:
  - port: 5000  # 集群内暴露的端口
    name: http
    protocol: TCP  # 网络协议
    targetPort: 5000  # pod端口

创建完成后,通过service生成的ip+port就可以访问到外部的服务

七、configmap

k8s 部署项目时,有一个敏感词或者动态变更的参数,不能写死在docker镜像中,

k8s提供了 configmap,用来配置参数

example

test-xj-config.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: test-xj-config
  namespace: asp
data:
  NAME: "config-xiaoming"
  AGE: "23"  # 在configmap中不支持数值,所以所有参数必须是字符串
  SEX: "female"

test-xj-deployment.yaml

apiVerson: apps/v1
kind: Deployment
metadata:
  name: test-xj-deployment
  namespace: asp
spec:
  selector:
    matchLabels:
      app: test-xj-app
  replicas: 1
  template:
    metadata:
      labels:
        app: test-xj-app
    spec:
      containers:
      - name: test-xj-app
        image: 101.34.182.36:10080/test:xj
        imagePullPolicy: IfNotPresent
        envFrom:
        - configMapRef:  # configmap 应用
            name: test-xj-config  # 应用的config的名字
        commad: [ "python" ]
        args: [ "/opt/asp/api/test.py" ]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/587.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UE笔记-AI Move To无法正常结束/打断 1

启用Stop on Overlap 会导致AI与目标距离受到碰撞影响&#xff0c;实际效果需按要求处理 当Lock AILogic为True时&#xff0c;Move To的Task无法被黑板装饰器打断 当Use Continuos Goal Tracking为True时&#xff0c;Move To的节点不会根据Acceptance Radius设定而结束&#x…

第五周作业、第一次作业(1.5个小时)、练习一

一、创建servlet的过程没有太多好说的&#xff0c;唯一需要注意的就是&#xff1a;旧版本的servlet确实需要手动配置web.xml文件&#xff0c;但是servlet2.5以后,servlet的配置直接在Java代码中进行注解配置。我用的版本就不再需要手动去配置web.xml文件了&#xff0c;所以我只…

Spring Cloud Alibaba 微服务2,注册中心演变 + Nacos注册中心与配置中心

目录专栏导读一、什么是Nacos&#xff1f;二、注册中心演变及其设计思想1、RestTemplate调用远程服务2、通过Nginx维护服务列表&#xff08;upStream&#xff09;3、通过Nacos实现注册中心4、心跳版Nacos三、Nacos Discovery四、Nacos核心功能1、服务注册2、服务心跳3、服务同步…

Python的30个编程技巧

1. 原地交换两个数字 Python 提供了一个直观的在一行代码中赋值与交换&#xff08;变量值&#xff09;的方法&#xff0c;请参见下面的示例&#xff1a; x,y 10,20 print(x,y) x,y y,x print(x,y) #1 (10, 20) #2 (20, 10) 赋值的右侧形成了一个新的元组&#xff0c;左侧立即解…

Kubernetes详细安装

By&#xff1a;雪月三十 参考&#xff1a; https://blog.csdn.net/qq_43580215/article/details/125153959 https://juejin.cn/post/6844903943051411469 https://mp.weixin.qq.com/s?__bizMzI0MDQ4MTM5NQ&mid2247502359&idx1&sn8c16100c9731359b9864403183f44233…

python 正则使用详解

python 正则使用详解什么是正则在 python 中使用正则一些正则的定义python 正则的方法match 从字符串开头匹配正则返回的结果分析&#xff08;重要&#xff09;fullmatch 严格匹配整个字符串search 任意位置开始匹配sub 替换匹配内容subn 以元组方式返回替换结果split 正则切割…

一 Go环境搭建

1. 下载地址 https://golang.google.cn/dl/ 傻瓜式安装&#xff0c;自动会配置path的变量&#xff0c;安装完成后可以使用go version 查看当前安装的版本 本文使用目前最新的1.20.2版本 2. 配置go环境 cmd控制栏打开输入以下命令&#xff08;如果cmd有问题可以尝试powershe…

面试了一个32岁的程序员,一个细节就看出来是培训班的····

首先&#xff0c;我说一句&#xff1a;培训出来的&#xff0c;优秀学员大有人在&#xff0c;我不希望因为带着培训的标签而无法达到用人单位和候选人的双向匹配&#xff0c;是非常遗憾的事情。 最近&#xff0c;在网上看到这样一个留言&#xff0c;引发了程序员这个圈子不少的…

Qt(c++)调用海康威视监控摄像头

文章目录一.海康威视监控摄像头开发SDK介绍二.海康SDK模块说明三.Qt项目中海康威视SDK配置四.实时预览摄像头图像程序一.海康威视监控摄像头开发SDK介绍 设备网络SDK是基于设备私有网络通信协议开发的&#xff0c;为嵌入式网络硬盘录像机、NVR、网络摄像机、网络球机、视频服务…

【Linux】冯诺依曼体系结构

冯诺依曼体系结构一、计算机结构体系来源二、冯诺依曼体系结构三、冯诺依曼体系结构中的数据流动一、计算机结构体系来源 研制电子计算机的想法产生于第二次世界大战期间&#xff0c;主要用来进行弹道计算&#xff0c;在"时间就是胜利"的战争年代&#xff0c;迫切需…

【JavaEE进阶篇1】认识Spring、认识IoC、使用spring创建对象

目录 一、什么是Spring 1.1容器 1.2什么是IoC 传统方式创建对象的问题&#xff1a; 类与类之间的耦合性过大 Ioc的优点 Spring IoC容器最核心的功能 1.3DI概念说明(Dependency Injection) IoC和DI的区别是什么 二、Spring项目的创建 三、Spring的使用(把对象存储到spr…

ChatGPT是如何训练得到的?通俗讲解

首先声明喔&#xff0c;我是没有任何人工智能基础的小白&#xff0c;不会涉及算法和底层原理。 我依照我自己的简易理解&#xff0c;总结出了ChatGPT是怎么训练得到的&#xff0c;非计算机专业的同学也应该能看懂。看完后训练自己的min-ChatGPT应该没问题 希望大牛如果看到这…

stm32外设-中断详解

0. 写在最前 本栏目笔记都是基于stm32F10x 1. 中断是啥&#xff1f; 什么是中断&#xff1a;CPU在处理某一事件A时&#xff0c;发生的另外某一事件B请求CPU去处理&#xff08;产生了中断&#xff09;&#xff0c;随后CPU暂时中断当前正在执行的任务&#xff0c;去对事件B进行处…

Java的二叉树、红黑树、B+树

数组和链表是常用的数据结构&#xff0c;数组虽然查找快&#xff08;有序数组可以通过二分法查找&#xff09;&#xff0c;但是插入和删除是比较慢的&#xff1b;而链表&#xff0c;插入和删除很快&#xff08;只需要改变一些引用值&#xff09;&#xff0c;但是查找就很慢&…

【C#】组件化开发,调用dll组件方法

系列文章 C#项目–业务单据号生成器&#xff08;定义规则、自动编号、流水号&#xff09; 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/129129787 C#项目–开始日期结束日期范围计算&#xff08;上周、本周、明年、前年等&#xff09; 本文链接&…

快排函数 -- qsort函数(Quick Sort)

文章目录&#x1f50e;1.qsort函数简介&#x1f4a1;1.1.函数原型&#x1f4a1;1.2.参数含义&#x1f50e;2.比较函数介绍&#x1f50e;3.比较函数使用案例&#x1f4a1;3.1.整型数组&#x1f4a1;3.2.浮点型数组&#x1f4a1;3.3.结构体类型 - 字符串&#x1f50e;4.利用冒泡排…

震撼,支持多模态模型的ChatGPT 4.0发布了

最近几个月&#xff0c;互联网和科技圈几乎ChatGPT刷屏了&#xff0c;各种关于ChatGPT的概念和应用的帖子也是围绕在周围。当去年年底ChatGPT发布的那几天&#xff0c;ChatGPT确实震撼到了所有人&#xff0c;原来AI还可以这么玩&#xff0c;并且对国内的那些所谓的人工智能公司…

Tesla都使用什么编程语言?

作者 | 初光 出品 | 车端 备注 | 转载请阅读文中版权声明 知圈 | 进“汽车电子与AutoSAR开发”群&#xff0c;请加微“cloud2sunshine” 总目录链接>> AutoSAR入门和实战系列总目录 带着对更美好未来的愿景&#xff0c;特斯拉不仅成为有史以来最有价值的汽车公司&…

多线程(初阶)

文章目录一.初始线程(Thread)1.1.线程的概念1.2.线程的优势1.2.1.线程比进程更轻量1.2.2.并发编程1.3.线程和进程的区别二.Thread类方法2.1. java 中创建线程的方法2.1.1. 继承Thread,重写run2.1.2. 实现Ruuable接口2.1.3. 使用匿名内部类,继承Thread2.1.4.使用匿名内部类,实现…

[蓝桥杯单片机]——八到十一届初赛决赛客观题

第八届初赛 一、填空题 采用外部12MHz晶振&#xff0c;经过系统12分频时定时器获得最大定时长度&#xff0c;此时定时器定时脉冲为1MHz&#xff0c;周期为1s&#xff0c;而定时器计时均为16位加法计数器&#xff0c;即计时长度为。 二、 选择题 ①带阻滤波器是指能通过大多数频…