首页 > 编程知识 正文

k8s分布式环境搭建,k8s helm部署redis-ha集群

时间:2023-05-06 01:43:14 阅读:254636 作者:1554

一、配置环境:

        需要docker、helm、k8s环境

        docker安装操作可查看docker官方网站

        helm安装操作可查看Helm安装官网

        K8S安装操作可查看Kubernetes(K8S)入门与安装配置

二、构建一个项目

        编写一个springboot项目,只需要实现helloworld就行;

        将编写的项目打包成jar文件;

        将jar文件上传到本地。

三、通过docker将镜像部署

        1、Docker部署其中主要是依赖于DockerFile文档;

                因此第一步需要编写一个DockerFile文档(DockerFile文件名首字母必须大写);           

FROM java:8MAINTAINER xfRUN yum -y install vimADD demo-xf.jar demo.jarEXPOSE 8080ENTRYPOINT ["java","-jar","demo.jar"]ENV JAVA_HOME /path/to/java/direntCMD echo "hello world"

  其中的一些参数需要了解其作用,这里涉及到的几个参数分别是:

  FROM:用于指定基础镜像,可以是自己生成的镜像,也可以是系统自带的镜像。当这个项目是一个Java项目时,它所依赖的基础镜像就是jdk版本为8的java基础镜像。

  MAINTAINER:指定作者名的。

  RUN:构建容器时需要运行的命令,可以写在RUN后面;有两种写法:一种是后接shell命令;另一种是类似于函数调用,RUN[“executable”,”param1”,”param2”],executable可看作一种可执行文件,后面两个是两个参数。

 ADD:复制,语法ADD <src> <dest>,可以把虚拟机和容器看作两个Linux服务器,将虚拟机本地文件(<src>)复制到容器中的某个路径(<dest>)下.

 EXPOSE:将容器运行时的监听端口暴露给外部,从外部浏览器访问时,所需的端口号。

 ENTRYPOINT:启动时的默认命令,这里的意思就是容器启动时就执行这个项目的jar文件。

 ENV:设置环境变量。

 CMD:容器启动时执行的命令,具体和RUN相似,其中包含的参数必须使用双引号””,参数传递后docker解析的是JSON数组。

CMD和RUN的区别是RUN构建容器时就运行的命令以及提交运行结果;CMD是容器启动时执行的命令,构建时不运行。

还有其他参数可参考

2、启动docker

    输入命令: docker start

3、构建镜像

    输入命令:docker build -t 自定义镜像名:镜像版本(不写就默认为latest) .(这个英文句号不能忽视)  

4、启动容器

    输入命令:docker run -d --name 自定义容器名 -p 8080:8080 上面创建的镜像名:镜像版本

    登录harbor:docker login

5、推送到仓库

    标记tag:docker tag 上面创建的镜像名:镜像版本 仓库路径/镜像名:镜像版本

    推送:docker push 仓库路径/镜像名:镜像版本

    可以直接编写一个.sh文件,然后在本地中运行。

REGISTRY="registry.nervhub.nervstack.io/nerv3"HELM_VERSION=1.0IMAGES=java_xfHELM_REPO=https://registry.nervhub.nervstack.io/chartrepo/nerv3docker start#构建镜像if ! docker build -t my/"$IMAGES":"$HELM_VERSION" .;then echo "build $IMAGES docker image failed" exit 1fi#启动容器docker run -d --name java_xf -p 8080:8080 my/"$IMAGES":"$HELM_VERSION"#登录harbordocker login#标记tagdocker tag my/"$IMAGES":"$HELM_VERSION" "$REGISTRY"/"$IMAGES":"$HELM_VERSION"#推送到仓库if ! docker push "$REGISTRY"/"$IMAGES":"$HELM_VERSION";then echo "push $IMAGES docker image failed" exit 1fiecho "docker push finish" 四、编写helm

        1、helm是什么?

     Helm是通过打包的方式,部署和管理k8s应用。K8S应用部署的时候是需要依次部署deployment、service这些的,当K8S的资源清单文件比较多的时候,部署起来步骤很繁琐。

       Helm是把部署环境封装起来,使K8S的应用管理可配置且能动态生成,通过动态生成K8S的资源清单文件,然后使用kubectl自动调用K8S资源部署。

        2、helm文件结构

    (1)Templates包中放K8S的资源清单文件,使用.yaml文件格式,一般有deployment.yaml、service.yaml、NOTES.txt等;

        NOTES.txt文件是chart的帮助文本,用户运行helm install时显示给用户;

       deployment.yaml时创建Kubernetes deployment的基本mainfest;

       service.yaml是为deployment创建service的mainfest。

#deployment.yamlapiVersion: apps/v1kind: Deploymentmetadata: labels: app: {{ .Values.deployment.labels }} name: {{ .Values.deployment.name }}spec: replicas: {{ .Values.deployment.replicas }} selector: matchLabels: app: {{ .Values.deployment.labels }} template: metadata: labels: app: {{ .Values.deployment.labels }} spec: containers: - image: registry.nervhub.nervstack.io/nerv3/{{ .Values.deployment.imageRepository }}:v1 name: {{ .Values.deployment.name }} #service.yamlapiVersion: v1kind: Servicemetadata: labels: app: {{ .Values.deployment.name}} name: {{ .Values.service.name}}spec: type: {{ .Values.service.type}} ports: - port: {{ .Values.service.port}} protocol: {{ .Values.service.protocol}} targetPort: {{ .Values.service.targetPort}} selector: app: {{ .Values.deployment.labels}}

        (2)Values.yaml文件中用于统一存放资源清单文件的参数,资源清单文件在引用时格式为{{ .Values.XXX.xxxx}},Values这里必须大写,所有资源清单文件的参数都放在Values.yaml文件中。

#deploy-hello.yamldeployment: name: mydep replicas: 1 labels: mydep imageRepository: my/java_xf#svc-hello.yamlservice: name: mydep-service type: NodePort port: 8080 targetPort: 8080 protocol: TCP

        (3)Chart.yaml文件:

apiVersion: v2name: java_xftype: applicationversion: 1.0.0appVersion: v1

                几个必须项:

                ApiVersion:是chart的apiVersion,始终是v1

                Name:chart的名

                Version:chart的版本号,需要符合Semver 2

                配置简单的helm文件一般可以使用默认的chart.yaml文件。

                其他配置参数

五、打包helm

        Helm package 上传的helm包名

六、上传至仓库

        两种方式:

                1、到Harbor中直接上传。

                2、命令:

#添加远程仓库地址helm repo add pipeline --username=$HELM_USER --password=$HELM_PASS $HELM_REPO --insecure-skip-tls-verify#推送helm包#需要安装helm push插件helm push jerrow-cloudmanager-$HELM_VERSION.tgz pipeline --insecureecho "helm push finish"

安装helm push插件,详见helm push安装

一文带你深入剖析Java线程池的前世今生如何使用TypeScript实现一个类型安全的EventBus分布式存储可以等同于超融合吗?CSS中div滚动条样式如何设置不同类型的AL服务器如何选择?win7中qq截图快捷键是什么

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。