当前位置: 首页 > article >正文

跨可用区的集群k8s的基本操作和配置理解

service

启动:kubectl  -f api_service.yaml -n <namespace>

查询:kubectl get svc -n <namespace>   ;

修改:kubectl apply -f api_service.yaml -n <namespace>

停止service: kubectl delete svc [service名字] 或者 kubectl delete -f api_service.yaml (删除文件中定义的所有service)

pod

启动:kubectl  -f api.yaml -n <namespace>

查询:kubectl get pods -n <namespace>   ;kubectl describe pod [podName] -n <namespace>

修改:kubectl apply -f api.yaml -n <namespace>

删除pod重启: kubectl delete pod [pod_name]

停止pod:kubectl delete -f api.yaml

:pod就是在deployment下面定义的,因此停止了pod,deployment也会停止,而删除pod,由于deployment还在,所以会自动重启

pod和service一般可以写到一个文件中,一次性全部启动,一次性全部删除

apisixroute

启动:kubectl  -f apisixroute.yaml -n <namespace>

查询:kubectl get apisixroute -n <namespace>   ;kubectl describe apisixroute -n <namespace>

修改:kubectl apply -f apisixroute.yaml -n <namespace>

停止: kubectl delete apisixroute <apisixrouter的名字> 或者 kubectl delete -f apisixroute.yaml (删除文件中定义的所有apisixroute)

configmap

==共享k8s更换configmap的操作 ==

  1. kubectl get configmaps -n <namespace>
  2. kubectl delete configmap configmap-config2 -n
  3. 删除application 4.传入新的application 5.kubectl create configmap configmap-config2 --from-file=application.yml -n <namespace> 6. 重启服务

:configmap在pod的yml文件中配置,包括configmap的名称,就是springboot项目中用到的application.yml文件转换的

apiVersion: apps/v1
kind: Deployment
metadata:
  name: <deployment名称>
  namespace: <namespace名称>
spec:
  replicas: 3  <启动的容器的数量,保证高可用>
  selector:
    matchLabels:
      component: test #<是一个列表,用于匹配pod标签,表示deployment应用到那些pod上>
  template:
    metadata:
      labels:
        component: test  #<和上面的matchLabels.component的值需要保持一致,否则报错>
    spec:
      affinity:
        nodeAffinity: #节点亲和
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions: #选择调度到哪些 AZ
                - key: topology.kubernetes.io/zone
                  operator: In
                  values:
                    - suzhou
                    - wuxi
                    #- fenhu
        podAntiAffinity: #pod 反亲和,控制 pod 起在不同主机
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
                - key: component #根据服务标签自行修改好了
                  operator: In
                  values:
                    - test-api #根据服务标签自行修改
            topologyKey: kubernetes.io/hostname
      topologySpreadConstraints: #均匀分布,控制 pod 起在不同 AZ
      - labelSelector:
          matchLabels:
            component: test-api #根据服务标签自行修改maxSkew:1
        maxSkew: 1  
        topologyKey: topology.kubernetes.io/zone
        whenUnsatisfiable: DoNotSchedule
      tolerations: #容忍,允许 pod 调度到 Euler 节点
        - effect: NoSchedule
          key: noderole
          operator: Equal
          value: Euler
      nodeSelector: #选择调度到 Euler
        noderole: Euler                      
      containers:   #一个pod可以定义多个docker容器   使用kubectl describe <pod名称> 可以查看到docker容器的细节信息
      - name: <容器名称>
        image: 镜像地址:镜像号  
        imagePullPolicy: IfNotPresent  #镜像pull策略,Always(总是),Never(总不),IfNotPresent(如果没有就pull) IfNotPresent 本地的k8s没有镜像才去远程pull
        lifecycle: {}
        resources:
          limits:
            cpu: 500m
            memory: 1Gi
          requests:
            cpu: 500m
            memory: 1Gi
        ports:
        - containerPort: 9900
        volumeMounts:
          - name: config-volume
            mountPath: /apps/svr//resource
      volumes:
        - name: config-volume
          configMap:
            name: test-config2   #用于配置本容器应用的configmap
---
apiVersion: v1
kind: Service
metadata:
  name: <service名称>
spec:
  selector:
    component: test #<一个标签,用于匹配deployment标签,表示service应用到那个service中>
  ports:
    - protocol: TCP
      port: 9900 
      targetPort: 9900        #将容器的9900端口映射到pod的9900端口,可以通过pod的地址+端口访问容器服务
  #      nodePort: 32698
  type: ClusterIP     #除了ClusterIP,还有NodePort,LoadBalancer选项      ClusterIP表示只能在k8s集群内部访问,NodePort表示可以再k8s集群以外的地址访问,需要配置额外的参数nodePort,如上注释掉的部分,表示暴露在外的端口,LoadBalancer是负载均衡的方式(我没用过)

apisixroute.yaml文件

apiVersion: apisix.apache.org/v2alpha1
kind: ApisixRoute
metadata:
  name: <apisix的名称>
  namespace: <命名空间>
spec:
  http:
    - name: <spec的名称>
      match:
        hosts:
          - console.exam.test.internal
        paths:
          - /exam/console/service/*
      backend:
        serviceName: <访问的service的名称>
        servicePort: 9900
      plugins:
        - name: proxy-rewrite
          enable: true
          config:
            regex_uri: [ "^/exam/console/service/(.*)", "/exam/$1" ]  #在转发请求之前,Apache APISIX 会使用 proxy-rewrite 插件对请求的 URI 进行重写,将 /exam/console/service/(.*) 重写为 /exam/$1,其中 $1 是原始路径中 /exam/console/service/ 之后的部分。

==一个有意思的命令 ==

kubectl explain Deployment.spec.selector 解释Deployment里的spec.selector标签 哪个标签不懂的话就改成哪个标签,会有英文解释


http://www.kler.cn/a/374126.html

相关文章:

  • C语言指针的介绍
  • 忘记无线网络密码的几种解决办法
  • 网络搜索引擎Shodan(2)
  • 分别用webpack和vite注册全局组件
  • 目前最新最好用 NET 混淆工具 .NET Reactor V6.9.8
  • Linux线程安全(二)条件变量实现线程同步
  • 【开源免费】基于SpringBoot+Vue.JS网上订餐系统(JAVA毕业设计)
  • SQL 通用数据类型
  • 【数据库设计】规范设计理论之数据依赖的公理系统(1)
  • 百数功能更新——表单提交支持跳转到外部链接并支持传参
  • ssm基于WEB的人事档案管理系统的设计与实现+jsp
  • 【c++ gtest】使用谷歌提供的gtest和抖音豆包提供的AI大模型来对代码中的函数进行测试
  • WPF自定义日历控件Calendar 的方法
  • STM32F103C8T6学习笔记2--LED流水灯与蜂鸣器
  • 树莓派5调取本地视频
  • Spring Boot框架:校园社团信息管理的新选择
  • cmake编译时arch=compute_32,code=sm_32 -gencode 的含义
  • Java面试经典 150 题.P274. H 指数(011)
  • 【Hive sql面试题】找出连续活跃3天及以上的用户
  • 用示波器如何调方波?
  • GitHub个人主页美化
  • 【Paper Note】利用Boundary-aware Attention边界感知注意力机制增强部分伪造音频定位
  • Java | Leetcode Java题解之第523题连续的子数组和
  • linux之netlink 内核源码分析
  • 【K8S系列】Kubernetes LoadBalancer 类型的 Service 未分配 IP 地址排查步骤及命令执行结果分析
  • 从壹开始解读Yolov11【源码研读系列】——Data.Augment.py:数据增强模块第四部分——Format标签格式标准化操作