最近入职了新公司,项目用到以前没用到的k8s,k8s学习实践系列记录一下我的学习demo吧。
背景
我已经有了k8s集群,上面做了mysql并支持持久化存储(PVC+PV+NFS),现在要迁移自己的服务到k8s集群中,并使用k8s中的mysql服务。mysql服务之前那篇文章已经搭好了。
由于我的是springcloud微服务应用,使用了spring consul注册中心,迁移时还需要迁移注册中心。
实现步骤
1.本地测试
1.1测试k8s的mysql服务连通性
使用centos ip+port测试是否程序是否可连接k8s的mysql服务
(1)查询k8s的mysql服务port
[root@m bootstrap-k8s]# kubectl get svc -n bootstrap-k8s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
bootstrap-mysql ClusterIP 10.111.182.202 <none> 3307/TCP 2d14h
mysql NodePort 10.111.185.243 <none> 3308:31266/TCP 16h
本地测试先使用ip方式,后续上了集群再使用k8s service name方式访问。
(2)修改本地配置文件
# datasource
spring.datasource.url = jdbc:mysql://192.168.209.128:31266/bootstrap?useSSL=false&allowPublicKeyRetrieval=true&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username = root
spring.datasource.password = Cc123456#
# 是否启用consul
spring.cloud.consul.enabled = true
spring.cloud.consul.host = 192.168.209.128
spring.cloud.consul.port = 8500
(3)启动本地服务,测试访问正常
1.2测试application.properties后续使用configMap
上一步正常访问后通过maven打成jar包,将application.properties复制到与jar包同级目录
使用java -jar bootstrap-0.0.1-SNAPSHOT.jar -Dspring.config.location=./application.properties命令启动服务,访问http://localhost:8012/test/testMybatis,成功即可。后续迁移到k8s就使用这种方式进行使用application.properties。
这一步主要是方便我们迁移到k8s以后修改数据库配置。端口号这里修改只是为了有没有起效果,后续端口yaml文件还是要和properties中一样的,否则服务启动起来访问不了。
2.将应用程序做成镜像并推送至仓库
因为我之前推送过,以免混淆,此次全部用2.0版本
(1)上传jar包和application.properties文件
(2)Dockerfile并生成镜像
[root@m application]# vi Dockerfile
FROM openjdk:8-jre-alpine
COPY bootstrap-0.0.2-SNAPSHOT.jar /bootstrap-0.0.2.jar
ENTRYPOINT ["java","-jar","/bootstrap-0.0.2.jar"]
[root@m application]# docker build -t cclady/bootstrap-k8s-image:v2.0 .
Sending build context to Docker daemon 49.14MB
Step 1/3 : FROM openjdk:8-jre-alpine
---> f7a292bbb70c
Step 2/3 : COPY bootstrap-0.0.2-SNAPSHOT.jar /bootstrap-0.0.2.jar
---> f11a70569a02
Step 3/3 : ENTRYPOINT ["java","-jar","/bootstrap-0.0.2.jar"]
---> Running in d27e4bb458c8
Removing intermediate container d27e4bb458c8
---> 0b65505d8144
Successfully built 0b65505d8144
Successfully tagged cclady/bootstrap-k8s-image:v2.0
(3)推送镜像至仓库
[root@m application]# docker login
Authenticating with existing credentials...
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
[root@m application]# docker push cclady/bootstrap-k8s-image:v2.0
The push refers to repository [docker.io/cclady/bootstrap-k8s-image]
33791b63d729: Pushed
edd61588d126: Layer already exists
9b9b7f3d56a0: Layer already exists
f1b5933fe4b5: Layer already exists
v2.0: digest: sha256:fff4195d70e557bcf732136ef7a1cd2418f809f7e9d870d3435587b5672c757f size: 1159
3.编写注册中心资源文件并创建资源
(1)我们先手动docker run一个consul
docker run -d --net=host -e 'CONSUL_LOCAL_CONFIG={"leave_on_terminate": true}' consul
(2)然后去查看它的详情信息,这样帮助我们写k8s资源的yaml文件
[root@m application]# docker ps -a | grep consul
66649880b8b2 consul "docker-entrypoint.s…" About a minute ago Up About a minute quirky_taussig
[root@m application]# docker inspect 66649880b8b2
[
{
"Id": "66649880b8b2beb8bbab9dd37968f7a5b115dcc42c895aa1a2df3421a050a580",
"Created": "2021-07-22T09:08:22.990798553Z",
"Path": "docker-entrypoint.sh",
"Args": [
"agent",
"-dev",
"-client",
"0.0.0.0"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 64039,
"ExitCode": 0,
"Error": "",
"StartedAt": "2021-07-22T09:08:23.223065956Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:0846dc12365b73e2ffe2eb25541c30f1580d16b4ed424643f58975f3deae3ab0",
"ResolvConfPath": "/var/lib/docker/containers/66649880b8b2beb8bbab9dd37968f7a5b115dcc42c895aa1a2df3421a050a580/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/66649880b8b2beb8bbab9dd37968f7a5b115dcc42c895aa1a2df3421a050a580/hostname",
"HostsPath": "/var/lib/docker/containers/66649880b8b2beb8bbab9dd37968f7a5b115dcc42c895aa1a2df3421a050a580/hosts",
"LogPath": "/var/lib/docker/containers/66649880b8b2beb8bbab9dd37968f7a5b115dcc42c895aa1a2df3421a050a580/66649880b8b2beb8bbab9dd37968f7a5b115dcc42c895aa1a2df3421a050a580-json.log",
"Name": "/quirky_taussig",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel":