K8S搭建NACOS集群踩坑问题
创始人
2024-05-27 15:35:31
0

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

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

  1. yaml配置:

apiVersion: apps/v1
kind: StatefulSet
metadata:name: 'nacos-${parameters.nameSpace}-dm'namespace: '${parameters.nameSpace}'
spec:replicas: 1selector: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_REPLICASvalue: '1'- name: MYSQL_SERVICE_HOSTvalueFrom:configMapKeyRef:key: mysql.hostname: 'nacos-${parameters.nameSpace}-cm'- name: MYSQL_SERVICE_DB_NAMEvalueFrom:configMapKeyRef:key: mysql.db.namename: 'nacos-${parameters.nameSpace}-cm'- name: MYSQL_SERVICE_PORTvalueFrom:configMapKeyRef:key: mysql.portname: 'nacos-${parameters.nameSpace}-cm'- name: MYSQL_SERVICE_USERvalueFrom:configMapKeyRef:key: mysql.username: 'nacos-${parameters.nameSpace}-cm'- name: MYSQL_SERVICE_PASSWORDvalueFrom:configMapKeyRef:key: mysql.passwordname: 'nacos-${parameters.nameSpace}-cm'- name: MODEvalue: cluster- name: NACOS_SERVER_PORTvalue: '8848'- name: NACOS_APPLICATION_PORTvalue: '8848'- name: NACOS_SERVERSvalue: >-nacos-${parameters.nameSpace}-dm-0.nacos-${parameters.nameSpace}.${parameters.nameSpace}.svc.cluster.local:8848- name: PREFER_HOST_MODEvalue: hostname- name: nacos.naming.data.warmupvalue: 'false'image: 'nacos/nacos-server:2.0.3'imagePullPolicy: Alwaysname: k8snacosports:- containerPort: 8848name: client- containerPort: 9848name: client-rpc- containerPort: 9849name: raft-rpcresources:requests:cpu: 500mmemory: 2GiimagePullSecrets:- name: '${parameters.imagePullSecrets}'nodeName: host-52hostNetwork: trueapiVersion: v1
kind: Service
metadata:labels:app: 'nacos-${parameters.nameSpace}'name: 'nacos-${parameters.nameSpace}'namespace: '${parameters.nameSpace}'
spec:ports:- name: servernodePort: 28855port: 8848targetPort: 8848selector: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-112Normal   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: ErrImagePullNormal   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就自然而然通过认证获取到镜像;

相关内容

热门资讯

安卓系统和oppo系统哪个流畅... 你有没有想过,手机系统哪个更流畅呢?安卓系统和OPPO系统,这两个名字听起来就让人心动。今天,咱们就...
安卓怎么用微软系统,利用微软系... 你是不是也和我一样,对安卓手机上的微软系统充满了好奇?想象那熟悉的Windows界面在你的安卓手机上...
安卓系统如何安装nfc,安卓系... 你有没有想过,用手机刷公交卡、支付账单,是不是比掏出钱包来得酷炫多了?这就得归功于NFC技术啦!今天...
ios系统可以转安卓,跨平台应... 你有没有想过,你的iPhone手机里的那些宝贝应用,能不能搬到安卓手机上继续使用呢?没错,今天就要来...
iOSapp移植到安卓系统,i... 你有没有想过,那些在iOS上让你爱不释手的app,是不是也能在安卓系统上大放异彩呢?今天,就让我带你...
现在安卓随便换系统,探索个性化... 你知道吗?现在安卓手机换系统简直就像换衣服一样简单!没错,就是那种随时随地、随心所欲的感觉。今天,就...
安卓系统安装按钮灰色,探究原因... 最近发现了一个让人头疼的小问题,那就是安卓手机的安装按钮突然变成了灰色,这可真是让人摸不着头脑。你知...
安卓7.1.1操作系统,系统特... 你知道吗?最近我在手机上发现了一个超级酷的新玩意儿——安卓7.1.1操作系统!这可不是什么小打小闹的...
安卓os系统怎么设置,并使用`... 你有没有发现,你的安卓手机有时候就像一个不听话的小孩子,有时候设置起来真是让人头疼呢?别急,今天就来...
安卓降低系统版本5.1,探索安... 你知道吗?最近安卓系统又来了一次大动作,竟然把系统版本给降到了5.1!这可真是让人有点摸不着头脑,不...
解放安卓系统被保护,解放安卓系... 你有没有想过,你的安卓手机其实可以更加自由地呼吸呢?是的,你没听错,我说的就是解放安卓系统被保护的束...
校务帮安卓系统下载,便捷校园生... 你有没有想过,你的手机里装了一个神奇的助手——校务帮安卓系统下载?没错,就是那个能让你轻松管理学校事...
安卓系统没有拼多多,拼多多崛起... 你知道吗?最近我在手机上发现了一个小小的秘密,那就是安卓系统里竟然没有拼多多这个应用!这可真是让我大...
甜城麻将安卓系统,解锁全新麻将... 你有没有听说过那个超级火的甜城麻将安卓系统?没错,就是那个让无数麻将爱好者为之疯狂的软件!今天,就让...
安卓系统卸载的软件,深度揭秘卸... 手机里的软件越来越多,是不是感觉内存不够用了?别急,今天就来教你怎么在安卓系统里卸载那些不再需要的软...
安卓系统推荐好游戏,畅享指尖乐... 手机里的游戏可是咱们休闲娱乐的好伙伴,尤其是安卓系统的用户,选择面那可是相当广呢!今天,就让我来给你...
王者安卓系统怎么卖,揭秘如何轻... 你有没有听说最近王者安卓系统的火爆程度?没错,就是那个让无数玩家沉迷其中的王者荣耀!今天,我就来给你...
安卓开发系统内置证书,基于安卓... 你有没有想过,你的安卓手机里那些神秘的内置证书,它们到底是个啥玩意儿?别急,今天就来给你揭秘这些隐藏...
荣耀安装安卓原生系统,深度体验... 你知道吗?最近荣耀手机界可是掀起了一股热潮,那就是——荣耀安装安卓原生系统!这可不是什么小打小闹,而...
安卓13小米系统,创新功能与流... 你知道吗?最近安卓13系统可谓是风头无两,各大手机厂商纷纷推出自家的新版系统,其中小米的安卓13系统...