K8S搭建NACOS集群踩坑问题

这篇具有很好参考价值的文章主要介绍了K8S搭建NACOS集群踩坑问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、NACOS容器启动成功无法访问

  1. 现象描述:通过K8S的statefulset启动,通过NodePort暴露不能在外网访问,只能在MASTER主节点访问。

  1. yaml配置:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: 'nacos-${parameters.nameSpace}-dm'
  namespace: '${parameters.nameSpace}'
spec:
  replicas: 1
  selector:
    matchLabels:
      app: 'nacos-${parameters.nameSpace}'
  serviceName: 'nacos-${parameters.nameSpace}'
  template:
    metadata:
      annotations:
        pod.alpha.kubernetes.io/initialized: 'true'
      labels:
        app: 'nacos-${parameters.nameSpace}'
    spec:
      containers:
        - env:
            - name: NACOS_REPLICAS
              value: '1'
            - name: MYSQL_SERVICE_HOST
              valueFrom:
                configMapKeyRef:
                  key: mysql.host
                  name: 'nacos-${parameters.nameSpace}-cm'
            - name: MYSQL_SERVICE_DB_NAME
              valueFrom:
                configMapKeyRef:
                  key: mysql.db.name
                  name: 'nacos-${parameters.nameSpace}-cm'
            - name: MYSQL_SERVICE_PORT
              valueFrom:
                configMapKeyRef:
                  key: mysql.port
                  name: 'nacos-${parameters.nameSpace}-cm'
            - name: MYSQL_SERVICE_USER
              valueFrom:
                configMapKeyRef:
                  key: mysql.user
                  name: 'nacos-${parameters.nameSpace}-cm'
            - name: MYSQL_SERVICE_PASSWORD
              valueFrom:
                configMapKeyRef:
                  key: mysql.password
                  name: 'nacos-${parameters.nameSpace}-cm'
            - name: MODE
              value: cluster
            - name: NACOS_SERVER_PORT
              value: '8848'
            - name: NACOS_APPLICATION_PORT
              value: '8848'
            - name: NACOS_SERVERS
              value: >-
                nacos-${parameters.nameSpace}-dm-0.nacos-${parameters.nameSpace}.${parameters.nameSpace}.svc.cluster.local:8848
            - name: PREFER_HOST_MODE
              value: hostname
            - name: nacos.naming.data.warmup
              value: 'false'
          image: 'nacos/nacos-server:2.0.3'
          imagePullPolicy: Always
          name: k8snacos
          ports:
            - containerPort: 8848
              name: client
            - containerPort: 9848
              name: client-rpc
            - containerPort: 9849
              name: raft-rpc
          resources:
            requests:
              cpu: 500m
              memory: 2Gi
      imagePullSecrets:
        - name: '${parameters.imagePullSecrets}'
      nodeName: host-52
      hostNetwork: true


apiVersion: v1
kind: Service
metadata:
  labels:
    app: 'nacos-${parameters.nameSpace}'
  name: 'nacos-${parameters.nameSpace}'
  namespace: '${parameters.nameSpace}'
spec:
  ports:
    - name: server
      nodePort: 28855
      port: 8848
      targetPort: 8848
  selector:
    app: 'nacos-${parameters.nameSpace}'
  type: NodePort

  1. 原因分析: 因为我们要将POD固定运行在NODE52这台节点上,所以加上了

nodeName: host-52,但是同时也加上了hostNetwork: true,导致POD已经启动,但是只能在主节点通过28855端口访问,其它局域网机构加上28855端口无法访问。

在k8s中,若pod使用主机网络,也就是hostNetwork=true。则该pod会使用主机的dns以及所有网络配置,默认情况下是无法使用k8s自带的dns解析服务

但是可以修改DNS策略或者修改主机上的 域名 解析(/etc/resolv.conf),使主机可以用k8s自身的dns服务。一般通过DNS策略(ClusterFirstWithHostNet)来使用k8s DNS内部域名解析,k8s DNS策略如下:

Default: 继承Pod所在宿主机的DNS设置,hostNetwork的默认策略。

ClusterFirst(默认DNS策略):优先使用kubernetes环境的dns服务,将无法解析的域名转发到从宿主机继承的dns服务器。

ClusterFirstWithHostNet:和ClusterFirst类似,对于以hostNetwork模式运行的Pod应明确知道使用该策略。也是可以同时解析内部和外部的域名。

None: 忽略kubernetes环境的dns配置,通过spec.dnsConfig自定义DNS配置。

  1. 修改方案

4.1 一般使用主机网络就增加如下几行即可:

hostNetwork:true dnsPolicy:"ClusterFirstWithHostNet"

4.2 第二种方案 去除 hostNetwork:true

二、无法拉取私有仓库镜像

  1. 现象描述

kubectl describe pod nacos-itest-dm-0 -n itest

Events:
  Type     Reason          Age                    From               Message
  ----     ------          ----                   ----               -------
  Normal   Scheduled       6m25s                  default-scheduler  Successfully assigned gov-itest/nacos-gov-itest-dm-0 to host-112
  Normal   SandboxChanged  6m23s                  kubelet            Pod sandbox changed, it will be killed and re-created.
  Warning  Failed          5m41s (x3 over 6m24s)  kubelet            Failed to pull image "public-repository/prdsl/nacos-server:2.0.2": rpc error: code = Unknown desc = Get  unauthorized: Invalid credential. 请确认输入了正确的用户名和密码。
  Warning  Failed          5m41s (x3 over 6m24s)  kubelet            Error: ErrImagePull
  Normal   BackOff         5m7s (x7 over 6m22s)   kubelet            Back-off pulling image "public-repository/prdsl/nacos-server:2.0.2"
  Normal   Pulling         4m53s (x4 over 6m24s)  kubelet            Pulling image "public-repository/prdsl/nacos-server:2.0.2"
  Warning  Failed          75s (x23 over 6m22s)   kubelet            Error: ImagePullBackOff
  1. 原因分析 没有配置私有镜像仓库的拉取密钥

imagePullSecrets:

- name: '${parameters.imagePullSecrets}'

加上这个即可。

查看密钥

kubectl get secret

magePullSecret资源将Secret提供的密码传递给kubelet从而在拉取镜像前完成必要的认证过程,简单说就是你的镜像仓库是私有的,每次拉取是需要认证的。

配置说明

创建docker-registry类型的Secret对象,并在定义pod资源时明确通过"imagePullSecrets"字段来申明使用哪个私钥去认证;

创建docker-registry类型的Secret对象,然后把它添加到某个ServiceAccount对象中,使用了这个ServiceAccount对象创建出来的pod就自然而然通过认证获取到镜像;文章来源地址https://www.toymoban.com/news/detail-483457.html

到了这里,关于K8S搭建NACOS集群踩坑问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • k8s 集群 搭建过程问题汇总

    1. 为k8s集群添加内网域名 修改core-dns 的configmap ,添加hosts 2. 修改apiserver server端口号,支持NodePort 指向80 修改master 节点 vim /etc/kubernetes/manifests/kube-apiserver.yaml - --service-node-port-range=1-65535 然后记得重启  (此处我是kubeadmin 安装的k8s 集群) 删除pod 完后,会自动重启

    2024年02月14日
    浏览(47)
  • 安装 k8s集群的问题:默认容器运行时从 Docker 改为 Containerd

    💖The Begin💖点点关注,收藏不迷路💖 从 Kuberetes 1.20 版本开始,Kuberetes官方 已经将默认的容器运行时从Docker改为Containerd。 因此,从 Kubernetes 1.20 开始,Kuberetes官方将支持使用 Docker和Containerd 作为容器运时,也意味着Kubemetes从Docker的依赖中解耦了出来。 在 Kubernetes1.24 及之后

    2024年04月14日
    浏览(63)
  • 云原生之容器编排实践-在K8S集群中使用Registry2搭建私有镜像仓库

    基于前面搭建的3节点 Kubernetes 集群,今天我们使用 Registry2 搭建私有镜像仓库,这在镜像安全性以及离线环境下运维等方面具有重要意义。 Note: 由于是测试环境,以下创建了一个 local-storage 的 StorageClass ,并使用本地磁盘的方式创建使用 PV ,实际建议使用 NFS 。 共用到了三台

    2024年02月19日
    浏览(48)
  • windows wsl2 docker+k8s+cuda容器无法启动问题解决

    docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error running hook #1: error running hook: exit status 1, stdout: , stderr: Auto-detected mode as \\\'legacy\\\' nvidia-container-cli: mount error: file creation failed: /var/lib/docker/overl

    2024年02月13日
    浏览(44)
  • 解决containerd+k8s集群搭建镜像拉取不到的问题

    之前我写了一篇containerd+k8s搭建集群的文章,文章地址: https://blog.csdn.net/m0_51510236/article/details/130842122 在上面这篇文章中有小伙伴给我反映镜像拉取不到的问题,现在我们就来解决这个问题 因为是对上一篇文章拉取不到镜像问题的解决,所以安装前的准备工作请参考上一篇文

    2024年02月09日
    浏览(49)
  • k8s集群中集群方式安装nacos

    一个k8s集群,其中有三个master 节点,这三个节点的标签名称为etcd 三个master节点的ip 分别为:192.165.187.170 、192.165.187.171、192.165.187.172 一个mysql 数据库, 数据库的ip 为:192.165.187.180 用户名:root 密码:123456 在mysql 数据库中创建一个nacos名称的数据库,然后执行下面的建表语句

    2024年02月09日
    浏览(42)
  • k8s部署nacos集群模式

    主要是在k8s集群部署nacos集群(3节点),数据库使用外置的 mysql ,由于有现成的阿里云RDS,就直接使用了。相比官方的在k8s内创建数据库的方案更方便。所有nacos配置 全部保存在数据库中,不用担心重启掉线等异常导致配置文件丢失。 Nacos及所有相关服务都部署在default 命名空间

    2024年02月16日
    浏览(43)
  • k8s集群中安装kibana 7.x 踩坑

    1. FATAL ValidationError: child \\\"server\\\" fails because [child \\\"port\\\" fails because [\\\"port\\\" must be a number]] 解决办法: 在环境变量中指定端口: 2. Kibana FATAL Error: [elasticsearch.url]: definition for this key is missing 解决办法:kibana7.x 版本已经不使用 elasticsearch.url,改成 :

    2024年02月14日
    浏览(40)
  • k8s部署nacos集群以及服务注册

    使用mysql存储nacos数据 mysql搭建可以参考:https://blog.csdn.net/yorao4565/article/details/128445946 在k8s中部署nacos配置nacos-cm 在k8s中部署nacos的headless-service,用于集群间访问 用于服务注册 用于外部访问管理页面 访问nacos界面:http://10.10.10.10:30004 创建一个简单的服务,能启动就行,增加

    2024年02月07日
    浏览(43)
  • k8s containerd集群配置安装完整踩坑教程

    完整踩坑和精简内容 containerd安装参考 k8s安装参考 两台机器 系统 CentOS 7.9 1、关闭swap 2、网桥设置 3、ipvs设置 4、关闭防火墙 5、禁用selinux 6、添加源 在所有节点上执行 1、安装最新的kubectl kubelet kubeadm 2、安装containerd 安装 配置 重启 3、安装crictl 编写配置文件 下载镜像 mast

    2024年02月09日
    浏览(74)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包