总结:
工作负载类型是StatefulSet的pod,不论其上层的service是nodeport还是Headless, 对外提供的地址格式是: <pod name>.<service>:<port>
, 这种情况针对的是一个pod.
虽然在pod中ping其他pod的service也能ping通,但是配置文件中写service的话却无法连接。
1.nacos
nacos的工作负载类型是StatefulSet,pod+nodeport,对外连接使用的地址是:nacos-0.nacos:8848
nacos里添加的配置文件参数写法:
2.mysql
mysql的工作负载类型是StatefulSet,pod+Headless,对外连接使用的地址是:saber-db-0.saber-db:3306
3.redis
redis的工作负载类型是StatefulSet,pod+Headless,对外连接使用的地址是:redis-0.redis:6379
4.假设的一个springcloud框架中的一个模块,使用nacos作为配置和注册中心
先添加一个ConfigMap,具体内容如下:
然后在添加设置应用的时候,环境变量选择上一步创建的ConfigMap,配置,配置字典引用
然后命令/参数中的参数设置如下:
--spring.profiles.active=${PROFILE} --spring.cloud.nacos.config.server-addr=${NACOS_SERVER_ADDR} --spring.cloud.nacos.discovery.server-addr=${NACOS_SERVER_ADDR} --spring.cloud.sentinel.transport.dashboard=${SENTINEL_DASHBOARD_ADDR} --server.port=80
参数中变量会从设置的环境变量中取,环境变量中的参数是从ConfigMap中设置来的。
之所以这样设置,后期修改配置的话,只需要修改ConfigMap就可以了,命令/参数中的参数就没必要修改,除非有新增的环境变量,命令/参数中的参数需要使用
不是直接在命令/参数中的参数中直接设置,比如,设置成spring.profiles.active=test
引申知识
docker镜像文件中启动命令与k8s中的命令/参数的关系如下:
结合查看的Docker中的参数设置
FROM anapsix/alpine-java:8_server-jre_unlimited
MAINTAINER smallchill@163.com
RUN mkdir -p /blade/auth
WORKDIR /blade/auth
EXPOSE 8010
ADD ./target/blade-auth.jar ./app.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
CMD ["--spring.profiles.active=test"]
kuboard界面上容器的命令参数设置如下:
两者结合的最终效果是:
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"] + k8s中的参数:--spring.profiles.active=${PROFILE} --spring.cloud.nacos.config.server-addr=${NACOS_SERVER_ADDR} --spring.cloud.nacos.discovery.server-addr=${NACOS_SERVER_ADDR} --spring.cloud.sentinel.transport.dashboard=${SENTINEL_DASHBOARD_ADDR} --server.port=80
# k8s中的参数变量值从ConfigMap中获取