前言:写这篇文章也算是自己对k8s的一种学习,加深一下k8s对服务部署的印象。

环境:使用的本地windows系统下的docker desktop工具,高版本的docker desktop自带了k8s服务所以就不需要特地去linux系统上装k8s了。docker desktop相当于在windows系统下配置了docker环境和k8s环境,可以直接在powershell控制台中执行docker以及k8s的相关命令。

1.创建镜像:

这里我没有自己去创建一个nacos的镜像,而是通过docker拉取镜像的命令从仓库下载了nacos最新的镜像。

docker pull nacos/nacos-server

下载完成后可以通过 docker images 命令查看下载的镜像,当然你也可以自己通过DockerFile来手动创建镜像,下面我自己写的简单的nacos镜像,nacos也是直接从官网下载来的,通过命令复制到容器中并运行(这种方式也可以直接用在java部署上,复制相应的jar包,最后执行相应脚本就可以)

 然后是创建镜像命令

docker build -t nacos:v230712.1 -f .\NacosDockerfile .

不过自己创建的nacos镜像遇上好些问题:

1.docker镜像建立好后,启动容器报错 [[ : not found 

问题出在最后执行脚本文件的时候更具不同的系统,脚本开头不同比如ubuntu系统使用bash,linux系统使用sh

 2.如果是容器后台运行,命令执行完后容器就关闭了,我也是懵逼了好久也不知道为什么。

nacos的bin/startup.sh的启动命令原来是

我直接改成,顺带把日志的记录也给删了,这个我不知道会不会影响

不放在后台运行结果就没有再出现容器停止的情况,如果有大佬懂得话麻烦评论区解答一下。

镜像创建好后编写k8s的deployment.yaml文件:

apiVersion: apps/v1
kind: Deployment
metadata: 
    name: nacos-dep
    namespace: tangcfv1
spec:
    replicas: 1
    template:
        metadata: 
            labels:
                app: nacos-dep
        spec: 
            containers:
              - name: k8snacos
                image: nacos:v230712.1 
                ports:
                  - name: http-8848
                    containerPort: 8848
                    name: client
                env: 
                  - name: MODE
                    value: standalone
                  - name: PREFER_HOST_MODE
                    value: hostname
    selector:
        matchLabels:
            app: nacos-dep

执行命令:

kubectl apply -f .\nacos.yaml

运行结果:

 这里启动后外服服务器还不能访问,需要再启动service服务来进行转发service.yaml

apiVersion: v1
kind: Service
metadata:
    name: nacos-service
    namespace: tangcfv1
spec:
    selector:
        app: nacos-dep
    ports:
      - name: web
        port: 8848
        targetPort: 8848
        nodePort: 30001  #这个地方写30001是因为我这个docker desktop启动的时候默认的端口范围是30001~63225,我一下子也不知道那里配置就直接写30001了
    type: NodePort

 执行命令:

kubectl apply -f .\nacos-service.yaml

运行结果: 

 然后直接再浏览器输入:IP + 30001:8848/nacos

 就直接进去啦,不过不知道为啥没有做登录验证,我怀疑可能没有去读conf下面的配置,这个以后再说。

这个文章只是重述一下简单的k8s部署,实际上k8s的yaml文件中kind的类型貌似一共有10种,可以直接配置比如挂载卷、deployment与service一体等好些操作,我自己再研究研究,感觉有必要就在写写文章记录一下。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐