kubernetes编排文件示例

news2024/11/24 8:26:51

kubernetes编排文件示例

编排文件生成网址:https://www.kubebiz.com/

mysql单机

需要一个配置文件,内容不会就用默认的即可

my.cnf

[mysqld]

pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql

symbolic-links=0
sql-mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

mysql-deploy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-mysql
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-mysql
  template:
    metadata:
      labels:
        app: my-mysql
    spec:
      containers:
        - name: my-mysql
          image: 'mysql:8.0.30'
          imagePullPolicy: IfNotPresent
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: Jeol@1201
            - name: MYSQL_USER
              value: test
            - name: MYSQL_PASSWORD
              value: Jeol@1201
          ports:
            - containerPort: 3306
              protocol: TCP
              name: http
          volumeMounts:
            - name: my-mysql-data
              mountPath: /var/lib/mysql
            - name: mysql-conf
              mountPath: /etc/mysql/mysql.conf.d
      volumes:
        - name: my-mysql-data
          hostPath:
            # 确保文件所在目录成功创建。
            path: /app/kube/mysql/data
            type: DirectoryOrCreate
        - name: mysql-conf
          hostPath:
            path: /app/kube/mysql/conf/mysql.conf.d
            type: DirectoryOrCreate

mysql-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: mysql-export
  namespace: default
spec:
  type: NodePort
  selector:
    app: my-mysql
  ports:
    - port: 3306
      targetPort: 3306
      nodePort: 32306

nacos集群

官方:https://nacos.io/zh-cn/docs/v2/quickstart/quick-start-kubernetes.html

其他参考:https://www.likecs.com/show-305484280.html https://blog.csdn.net/warrah/article/details/106488733

1、nfs服务端安装

nfs服务端安装完成,编辑好规则,共享目录为/data/nfs-volume nfs服务的ip为 k8s-node1

2、部署NFS StorageClass

1、项目地址(有部分yaml文件从此项目获取),可以手动下载,再上传,下面的部分命令是在下载的项目下执行

git clone https://github.com/nacos-group/nacos-k8s.git

2、角色设置

kubectl create -f deploy/nfs/rbac.yaml

如果您的K8S命名空间不是默认的,请在创建RBAC之前执行以下脚本(不执行脚本,你直接再rbac.yaml中加上namesapce配置,效果一致,脚本更快)

kubectl create ns nacos
sed -i "s/namespace:.*/namespace: nacos/g" ./deploy/nfs/rbac.yaml

3.NFS-Client Provisioner部署,用于动态生成nfs类型的pv

kubectl create -f deploy/nfs/deployment.yaml -n nacos

# 执行前修改参照部署的nfs服务,修改如下
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner
---
kind: Deployment
apiVersion: apps/v1
metadata:
  name: nfs-client-provisioner
spec:
  replicas: 1
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: nfs-client-provisioner
  template:
    metadata:
      labels:
        app: nfs-client-provisioner
    spec:
      serviceAccount: nfs-client-provisioner
      containers:
        - name: nfs-client-provisioner
          image: quay.io/external_storage/nfs-client-provisioner:latest
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: fuseim.pri/ifs
            - name: NFS_SERVER
              value: k8s-node1  #修改
            - name: NFS_PATH
              value: /data/nfs-volume/nacos/nfs-share #修改
      volumes:
        - name: nfs-client-root
          nfs:
            server: k8s-node1  #修改
            path: /data/nfs-volume/nacos/nfs-share # 修改

4、storageclass创建,用于配合nfs-client-provisioner动态创建持久卷

kubectl create -f deploy/nfs/class.yaml -n nacos

记录一下内容

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: managed-nfs-storage
provisioner: fuseim.pri/ifs
parameters:
  archiveOnDelete: "false"

5、验证(根据标签获取对应pod的详情)

kubectl get pod -l app=nfs-client-provisioner -n nacos

3、数据库

可以只部署一个数据库,也可以部署主从数据库,需要说明的是,如果你使用先有的数据库,那么建表语句你可以再安装包的conf目录下找到

一个数据库部署参考,注意修改共享服务端地址和共享目录

kubectl create -f deploy/mysql/mysql-nfs.yaml -n nacos

主从数据库,主要是镜像不同

apiVersion: v1
kind: ReplicationController
metadata:
  name: mysql-master
  labels:
    name: mysql-master
spec:
  replicas: 1
  selector:
    name: mysql-master
  template:
    metadata:
      labels:
        name: mysql-master
    spec:
      containers:
      - name: mysql-master
        image: nacos/nacos-mysql-master:latest
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mysql-master-data
          mountPath: /var/lib/mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "root"
        - name: MYSQL_DATABASE
          value: "nacos_devtest"
        - name: MYSQL_USER
          value: "nacos"
        - name: MYSQL_PASSWORD
          value: "nacos"
        - name: MYSQL_REPLICATION_USER
          value: 'nacos_ru'
        - name: MYSQL_REPLICATION_PASSWORD
          value: 'nacos_ru'          
      volumes:
      - name: mysql-master-data
        nfs:
          server: k8s-node1
          path: /data/nfs-volume/nacos/mysql-master
---
apiVersion: v1
kind: Service
metadata:
  name: mysql-master
  labels:
    name: mysql-master
spec:
  type: NodePort
  ports:
  - port: 3306
    targetPort: 3306
    nodePort: 32308
  selector:
    name: mysql-master

apiVersion: v1
kind: ReplicationController
metadata:
  name: mysql-slave
  labels:
    name: mysql-slave
spec:
  replicas: 1
  selector:
    name: mysql-slave
  template:
    metadata:
      labels:
        name: mysql-slave
    spec:
      containers:
      - name: mysql-slave
        image: nacos/nacos-mysql-slave:latest
        ports:
        - containerPort: 3307
        volumeMounts:
        - name: mysql-slave-data
          mountPath: /var/lib/mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "root"
        - name: MYSQL_USER
          value: "nacos"
        - name: MYSQL_PASSWORD
          value: "nacos" 
        - name: MYSQL_REPLICATION_USER
          value: 'nacos_ru'
        - name: MYSQL_REPLICATION_PASSWORD
          value: 'nacos_ru'
      volumes:
      - name: mysql-slave-data
        nfs:
          server: k8s-node1
          path: /data/nfs-volume/nacos/mysql-slave
---
apiVersion: v1
kind: Service
metadata:
  name: mysql-slave
  labels:
    name: mysql-slave
spec:
  type: NodePort
  ports:
  - port: 3307
    targetPort: 3307
    nodePort: 32307
  selector:
    name: mysql-slave

应用生效,需要说明的是,从库无法连接,可能需要进入从库容器内部设置权限,还有就是镜像内部相关的表是已经创建好的,不需要在创建

kubectl create -f deploy/mysql/mysql-nfs-master.yaml -n nacos
kubectl create -f deploy/mysql/mysql-nfs-slave.yaml -n nacos

4、部署nacos

修改deploy/nacos/nacos-pvc-nfs.yaml和数据库配置文件保持一致即可!

主从数据可配置,

data:
  mysql.master.db.name: "主库名称"
  mysql.master.port: "主库端口"
  mysql.slave.port: "从库端口"
  mysql.master.user: "主库用户名"
  mysql.master.password: "主库密码"

kubectl create -f deploy/nacos/nacos-pvc-nfs.yaml -n nacos

pvc一直处于pending状态,

#  pvc日志
 Normal  ExternalProvisioning  4s (x22 over 5m19s)  persistentvolume-controller  waiting for a volume to be created, either by external provisioner "fuseim.pri/ifs" or manually created by system administrator

# pvc日志
provision "nacos/data-nacos-0" class "managed-nfs-storage": unexpected error getting claim reference: selfLink was empty, can't make reference

​ 解决方式一

​ 这样之后,我的kubectl命令直接启动执行不了了,放弃

# /etc/kubernetes/manifests/kube-apiserver.yaml

spec:
  containers:
  - command:
    - kube-apiserver
    ...
    - --feature-gates=RemoveSelfLink=false # 增加

解决方式二

使用不基于SelfLink的provisioner

参考:https://blog.csdn.net/echizao1839/article/details/125766826

# 国外镜像
gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner:v4.0.0
# 使用替换的国内镜像
registry.cn-beijing.aliyuncs.com/pylixm/nfs-subdir-external-provisioner:v4.0.0
# 替换nfs deploy中的镜像

内存不足

0/3 nodes are available: 1 Insufficient memory, 1 node(s) didn't match pod anti-affinity rules, 1 node(s) had untolerated taint {node-role.kubernetes.io/control-plane: }. preemption: 0/3 nodes are available: 1 Preemption is not helpful for scheduling, 2 No preemption victims found for incoming pod.
# 其中一台机器内存不足,所以这一块调小一点,无语,并且k8s的节点需要有三个,当然又时候并不是这个的原因,机器内存不足,该启动不了还是启动不了
            requests:
              memory: "500Mi"
              cpu: "300m"
# 调小之后,其中一致pending的nacos终于进入了初始化阶段,但是一直无法进入就绪状态,可以强制部署在内存充足的机器上,在deploy上添加
    spec:
      nodeName: k8s-node1

成功截图

5、通过ingress 访问

$ vim nacos-ingress.yaml
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nacos-headless
  namespace: nacos
spec:
  rules:
  - host: nacos-web.nacos-demo.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nacos-headless
            port:
              number: 8848

我ingress似乎有问题,天翼云端口问题,总之访问不了,配置仅供参考

6、尝试直接通过service暴露端口

添加nodePort访问,访问无响应

nacos pod内部日志报错,这个似乎不行,应该和StatefulSet的模式有关吧,改成nodePort就不行,不改的话日志还是正常的,无语,所以还是需要通过ingress访问

service 访问StatefulSet 似乎需要设置clusterIP: None, 然后service会生成StatefulSet 对应的DNS地址,然后sevice改了模式之后,导致nacos pod之间互相之间访问不了,构成不了集群

2022/11/05 10:42:11 Have not found myself in list yet.
My Hostname: nacos-0.nacos-headless.nacos.svc.cluster.local
Hosts in list: nacos-headless.nacos.svc.cluster.loca

nacos单机

yaml文件如下,注意,持久卷使用的是nfs,你可以替换成集群,部分配置可能多余,毕竟是通过集群的yaml文件改的,数据库也换了,初始化sql从安装包中获取

---
apiVersion: v1
kind: Service
metadata:
  name: nacos-headless
  labels:
    app: nacos-headless
spec:
  type: ClusterIP
  clusterIP: None
  ports:
    - port: 8848
      name: server
      targetPort: 8848
    - port: 9848
      name: client-rpc
      targetPort: 9848
    - port: 9849
      name: raft-rpc
      targetPort: 9849
      ## 兼容1.4.x版本的选举端口
    - port: 7848
      name: old-raft-rpc
      targetPort: 7848
  selector:
    app: nacos
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: nacos-cm
data:
  mysql.host: "10.127.1.12"
  mysql.db.name: "nacos_devtest"
  mysql.port: "3306"
  mysql.user: "nacos"
  mysql.password: "passwd"
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: nacos
spec:
  serviceName: nacos-headless
  replicas: 3
  template:
    metadata:
      labels:
        app: nacos
      annotations:
        pod.alpha.kubernetes.io/initialized: "true"
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                  - key: "app"
                    operator: In
                    values:
                      - nacos
              topologyKey: "kubernetes.io/hostname"
      containers:
        - name: k8snacos
          imagePullPolicy: Always
          image: nacos/nacos-server:latest
          resources:
            requests:
              memory: "2Gi"
              cpu: "500m"
          ports:
            - containerPort: 8848
              name: client
            - containerPort: 9848
              name: client-rpc
            - containerPort: 9849
              name: raft-rpc
            - containerPort: 7848
              name: old-raft-rpc
          env:
            - name: NACOS_REPLICAS
              value: "3"
            - name: MYSQL_SERVICE_HOST
              valueFrom:
                configMapKeyRef:
                  name: nacos-cm
                  key: mysql.host
            - name: MYSQL_SERVICE_DB_NAME
              valueFrom:
                configMapKeyRef:
                  name: nacos-cm
                  key: mysql.db.name
            - name: MYSQL_SERVICE_PORT
              valueFrom:
                configMapKeyRef:
                  name: nacos-cm
                  key: mysql.port
            - name: MYSQL_SERVICE_USER
              valueFrom:
                configMapKeyRef:
                  name: nacos-cm
                  key: mysql.user
            - name: MYSQL_SERVICE_PASSWORD
              valueFrom:
                configMapKeyRef:
                  name: nacos-cm
                  key: mysql.password
            - name: MODE
              value: "cluster"
            - name: NACOS_SERVER_PORT
              value: "8848"
            - name: PREFER_HOST_MODE
              value: "hostname"
            - name: NACOS_SERVERS
              value: "nacos-0.nacos-headless.default.svc.cluster.local:8848 nacos-1.nacos-headless.default.svc.cluster.local:8848 nacos-2.nacos-headless.default.svc.cluster.local:8848"
  selector:
    matchLabels:
      app: nacos


访问如图

开启权限认证

默认是允许所有客户端 进行操作,无需密码,添加环境变量

            - name: NACOS_AUTH_ENABLE
              value: "true"

dubbo-admin

访问是成功了,nacos也连接上了,但是查询不到服务列表,可能版本不对,需要下载源码本地跑一下试试,为啥版本是0.3.0, 这个0.5.0的不好使,而且其默认的最后一个版本就是0.3.0

apiVersion: apps/v1
kind: Deployment
metadata:
  name: dubbo-admin
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: dubbo-admin
  template:
    metadata:
      labels:
        app: dubbo-admin
    spec:
      containers:
        - name: dubbo-admin
          image: apache/dubbo-admin
          imagePullPolicy: IfNotPresent
          command: [ "/bin/bash", "-ce", "java -Dadmin.registry.address=nacos://nacos:nacos@61.171.5.6:30848 -Dadmin.config-center=nacos://nacos:nacos@61.171.5.6:30848 -Dadmin.metadata-report.address=nacos://nacos:nacos@61.171.5.6:30848 -jar /app.jar"]
          readinessProbe:
            tcpSocket:
              port: 8080
            initialDelaySeconds: 60 
            periodSeconds: 20
---
apiVersion: v1
kind: Service
metadata:
  name: dubbo-admin-service
  namespace: default
spec:
  type: NodePort
  selector:
    app: dubbo-admin
  ports:
    - port: 8089
      targetPort: 8080
      nodePort: 31990

关联信息

  • 关联的主题:
  • 上一篇:
  • 下一篇:
  • image: 20221021/1
  • 转载自:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python制作GUI学生管理系统,不会的看这里

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 欢迎观看本篇文章呀~不管你是学生还是工作人 我相信你进来了你就是想实现这个案例的 学会以后,还可以去接一些小小的外包,又是挣钱的一天~ 那么就开始实现吧!python制作GUI 学生管理系…

Curve 块存储应用实践 -- iSCSI

Curve 是云原生计算基金会 (CNCF) Sandbox 项目,是网易数帆发起开源的高性能、易运维、云原生的分布式存储系统。 为了让大家更容易使用以及了解 Curve,我们期望接下来通过系列应用实践文章,以专题的形式向大家展示 Curve。 本篇文章是Curv…

activiti框架搭建及问题记录

activiti应用什么是activitiactiviti配置首先创建项目配置pom依赖配置文件那么审批(流程)怎么创建呢?流程启动任务处理activiti问题分享数据库创建问题activiti事件监听器没有对象的问题什么是activiti activiti是一个业务流程管理的框架&am…

LeetCode中等题之使括号有效的最少添加

题目 只有满足下面几点之一,括号字符串才是有效的: 它是一个空字符串,或者 它可以被写成 AB (A 与 B 连接), 其中 A 和 B 都是有效字符串,或者 它可以被写作 (A),其中 A 是有效字符串。 给定一…

开发工具系列IDEA:配置注释自动生成

一、类、接口、枚举配置&#xff0c;进入idea后&#xff0c;依次打开 File -> Settings -> Editor -> File and Code Templates -> Files /*** FileName: ${NAME}* Author: ${USER}* Date: ${DATE} ${TIME}* Description: ${DESCRIPTION}* History:* <aut…

中国电信移动物联网发展成果与创新实践 ,干货满满

近日&#xff0c;首届移动物联网大会&#xff08;2022&#xff09;&#xff08;以下简称“大会”&#xff09;在江苏省无锡市举办。本次大会由工信部指导&#xff0c;中国信息通信研究院&#xff08;以下简称“中国信通院”&#xff09;、中国通信学会、无锡市人民政府、人民邮…

产品工作流| 项目评估

一、什么是项目评估 根据已有的公开招标书要求&#xff0c;销售侧拿到招标要求&#xff0c;让研发评估项目。 1、需求满足度评估。 2、需求开发项&#xff0c;以及成本评估。 3、总结项目评估。 二、项目评估流程 材料依据&#xff1a; 1、投标材料。 2、项目评估表&#x…

路由器,集线器,交换机,网桥,光猫有啥区别?

网络分层 网线替代了上面的灰色部分&#xff0c;实现物理层互联。 如果想要两台电脑互联成功&#xff0c;还需要确保每一层所需要的步骤都要做到位&#xff0c;这样数据才能确保正确投送并返回。 从数据链路层到物理层&#xff0c;数据会被转为01比特流。 此时需要把比特流传…

【软件测试】小陈她的测试追梦之路,实习开端到测试第一人......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 小陈&#xff1a;我…

中华黄金·金生态合伙人颁奖典礼在珠海站开幕完美收官!!

11月18-19日在广东珠海举行&#xff0c;近百位合伙人亲临现场&#xff0c;强者能人共聚天下&#xff0c;中华黄金合伙人&#xff0c;强强联手引爆市场&#xff0c;汇聚一堂。 本次活动以“金生态”为主题。CNG金生态是中华黄金集团旗下平台&#xff0c;运用WEB3.0核心技术聚合了…

Flink CDC入门实践--基于 Flink CDC 构建 MySQL 和 Postgres 的 Streaming ETL

文章目录前言1.环境准备2.准备数据2.1 MySQL2.2 postgres3.启动flink和flink sql client3.1启动flink3.2启动flink SQL client4.在flink SQL CLI中使用flink DDL创建表4.1开启checkpoint4.2对于数据库中的表 products, orders, shipments&#xff0c; 使用 Flink SQL CLI 创建对…

iOS开发之iOS15.6之后拉流LFLiveKit,画面模糊及16.1马赛克问题

更新了iOS15.6系统后&#xff0c;发现拉取LFLiveKit进行直播的流&#xff0c;竟然是这样的&#xff1a; 模糊不清&#xff0c;于是思考是什么原因导致的。 1、是不是拉流端出现的问题&#xff1f; 使用安卓拉取iOS的直播流&#xff0c;是同样的效果&#xff0c;又考虑到两端使…

【DL】Windows 10系统下安装TensorRT教程

Windows 10系统下安装TensorRT教程(手把手教程): Windows 10系统下安装TensorRT教程: 1.下载 https://developer.nvidia.com/nvidia-tensorrt-download EA 版本代表抢先体验(在正式发布之前)。 GA 代表通用性。表示稳定版,经过全面测试。 TensorRT、cuda、cudnn各版本…

与目前主流的消费返利平台对比,共享购模式有什么优势呢?

大家好&#xff0c;我是林工&#xff0c;之前几期内容都有介绍过共享购的商业模式&#xff0c;同时大家应该都对消费返利这方面有所了解。今天给大家分享一下整套模式的优劣势。 什么是消费返利&#xff1f;消费返利是互联网常见的一个商业模式&#xff0c;是指互联网平台将自…

毕业设计 基于STM32与wifi的天气预报网时钟系统 - 物联网 单片机

文章目录0 前言1 设计内容2 软件设计3 关键代码4 最后0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟学妹告诉学长自己做的项目系统达不…

为社区成员提供的全新在线分析仪表板(Analytics Dashboard)!

开发者们大家好&#xff01; 我们非常激动地与您分享我们为每个社区成员提供的在线分析仪表板(Online Analytics Dashboard)这一全新的强大功能&#x1f525; 从现在开始&#xff0c;您可以看到您自己的当周、月和所有时间的详细统计数据&#xff0c;包括&#xff1a; 浏览量&a…

The Sandbox Alpha 第三季排行榜公布

排行榜名单已经揭晓&#xff0c;祝贺所有玩家&#xff01; Alpha 第三季已于 11 月 1 日落下帷幕&#xff0c;这是我们目前最大的一季活动&#xff0c;也是展示社区和合作伙伴在过去一年中所创造的诸多体验的机会。 这次也是我们测试新的「边玩边赚」机制的机会&#xff0c;其中…

Vue响应式系统的作用与实现(二)

响应式系统的作用与实现&#xff08;二&#xff09; 这章主要是介绍非原始值的响应式方案。 1.理解Proxy和Reflect&#xff1a; Vue3的响应式数据是基于Proxy实现的&#xff0c;那么我们非常有必要了解Proxy和Refelct。 参考资料&#xff1a;阮一峰的 官方参考资料 简单来…

Python Flask框架 入门详解与进阶

Python Flask框架 入门详解与进阶1.Flask框架 入门2.环境搭建2.1.安装flask1.创建虚拟环境2.激活虚拟环境3.安装flask2.2.flask程序编写1.创建test.py文件2.启动运行2.3.参数说明1.Flask对象的初始化参数第一种 &#xff1a;从配置对象中加载 app.config.from_object(DefaultCo…

chrome108 版本跨域问题

前言 近期&#xff0c;chrome又更新了&#xff0c;自动更新到了chrome的108.0.5359.95&#xff08;正式版本&#xff09; &#xff08;64 位&#xff09;&#xff0c;更新到这个版本后&#xff0c;公司业务收到了一个故障&#xff0c;下面我们就来看看。背景&#xff1a; 客户…