1. 前置条件

k8s集群 (kubeadm部署一主二从k8s集群) 安装helm(参考官方文档) docker开启远程访问模式,方法:

sudo vim /usr/lib/systemd/system/docker.service 修改这一行,在后面加上-H tcp://0.0.0.0:2375:ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375 sudo systemctl daemon-reload sudo systemctl restart docker 复制代码

  1. 编写golang应用 前端:github.com/chintensaka… 后端:github.com/chintensaka… Vue + golang开发的docker api可视化小项目, 目前进度:25%,前端UI框架完成,容器列表界面完成;后端gin框架和docker go sdk引入完成,容器列表接口完成。 先跑起来再说,不必一开始就追求完美。

“我们知道这样不完美并且有问题,但这样可以把事情开展起来,重要的是,不要徘徊在第一次就想把事情做到完美”

  1. Dockerfile

多阶段构建

FROM golang:alpine AS build-env WORKDIR /opt/apps/docker-visualizing COPY . /opt/apps/docker-visualizing

ENV GOOS linux ENV GOARCH amd64 ENV GOPROXY https://goproxy.cn,direct

RUN go build -v -o /opt/apps/docker-visualizing/app

FROM alpine COPY --from=build-env /opt/apps/docker-visualizing/app /usr/local/bin/app COPY --from=build-env /opt/apps/docker-visualizing/conf/app.ini /usr/local/bin/ RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime EXPOSE 9281 CMD ["app"] 复制代码

构建镜像

docker build -t chins/docker-visualizing .

可以查看到已经生成了镜像

docker images

运行容器

docker run -d --name docker-visualizing -p 9281:9281 chins/docker-visualizing 复制代码 截至这里,使用docker 部署golang(gin)应用已经完成:可以从外部访问docker容器内的gin应用: docker build:

docker run:

访问:

  1. 使用helm部署应用 3.1 创建helm应用模板 helm create docker-visualizing 复制代码

3.2 分别编辑deploy、service、ingress(如果用ingress的话) 我这里只使用NodePort来暴露服务,等我学会了ingress再回来优化,并且存活探针和就绪探针现在也不需要,给他注释掉。 找到service.yaml里面的type,可以看到取的值在value.yaml里面:

service.yaml:

spec: type: {{ .Values.service.type }}

values.yaml: 改成NodePort

service: type: NodePort port: 9281

改成你自己build的镜像名字

image: repository: chins/docker-visualizing 复制代码 3.3 package && install

1. 打包chart包

helm package docker-visualizing 复制代码

我这里有两台node节点,镜像是在master上编译的,而我又没有上传到仓库,所以要把master上的镜像拷贝到两台node节点上,否则install的时候,因为node节点本地没有该镜像,所以去仓库拉取镜像会拉取不到:

master节点:

sudo docker save chins/docker-visualizing:latest -o docker-visualizing.tar scp docker-visualizing.tar ubuntu@192.168.1.106:/home/ubuntu scp docker-visualizing.tar ubuntu@192.168.1.251:/home/ubuntu

node节点:

sudo docker load -i docker-visualizing.tar 复制代码

2. 安装chart包

helm install docker-visualizing ./docker-visualizing-0.1.0.tgz 复制代码

  1. 按照提示操作获取NodePort:

  2. Get the application URL by running these commands: export NODE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].nodePort}" services docker-visualizing) export NODE_IP=$(kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}") echo http://$NODE_IP:$NODE_PORT 复制代码

  3. 访问:http://192.168.1.248:30484/ping 复制代码

  4. 结束。 让应用安装并且运行起来只是第一步,还有很多工作需要去做,比如各种yaml的编写、健康检查、ingress等,还有应用本身代码的优化,有很多变量可以提取到环境变量里面,还有secret/configmap等,有空再尝试。