K8s: 应用项目部署运维环境搭建

news/2024/5/19 4:02:38

使用 StatefulSet 部署 Mysql

  • 数据库环境准备是应用的前置准备工作

  • 先在 node 节点上安装 mysql

    • $ sudo yum install mysql-server -y 安装
    • $ sudo systemctl start mysqld 启动
    • $ sudo systemctl enable mysqld 设置开启启动
    • $ sudo mysql_secure_installation 设置安全选项
    • $ mysql --version 查看版本
  • 我们在 node1 这个 work 节点部署,准备 app-mysql.yaml

    apiVersion: v1
    kind: Service
    metadata:name: mysql-nodeport
    spec:ports:- port: 3306nodePort: 30306selector:app: mysqltype: NodePort---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:name: mysql
    spec:serviceName: "mysql"replicas: 1 # 虽然您要求不要副本,但StatefulSet通常需要至少一个副本selector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:containers:- name: mysqlimage: mysql:8.0.36env:- name: MYSQL_ROOT_PASSWORDvalue: "password"ports:- containerPort: 3306name: mysqlvolumeMounts:- name: mysql-configmountPath: /etc/mysql/conf.d- name: mysql-datamountPath: /var/lib/mysqlvolumes:- name: mysql-confighostPath:path: /tmp/mysql/conf.dtype: DirectoryOrCreate- name: mysql-datahostPath:path: /tmp/mysql/datatype: DirectoryOrCreate
    
  • $ kubectl create -f app-mysql.yaml 创建

    service/mysql-nodeport created
    statefulset.apps/mysql created
    
  • $ kubectl get all

    NAME          READY   STATUS    RESTARTS   AGE
    pod/mysql-0   1/1     Running   0          27sNAME                     TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
    service/kubernetes       ClusterIP   10.1.0.1       <none>        443/TCP          35h
    service/mysql-nodeport   NodePort    10.1.183.195   <none>        3306:30306/TCP   27sNAME                     READY   AGE
    statefulset.apps/mysql   1/1     27s
    
  • $ mysql -u root -P 30306 -h node1.k8s -p

    Enter password:
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 8
    Server version: 8.0.36 MySQL Community Server - GPLCopyright (c) 2000, 2024, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>
    
    • 输入密码 password 就可以登录了
  • 注意,在低版本的一些 mysql 中的配置会有不同,而且可能需要加上如下,不会意外退出

    command: [ "/bin/bash", "-c", "--" ]
    args: [ "while true; do sleep 30; done;" ]
    
  • 现在,我们可以创建一个新的数据库了

  • $ create database blogDBTest DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

    Query OK, 1 row affected, 2 warnings (0.06 sec)
    
  • 查看 $ show databases

    +--------------------+
    | Database           |
    +--------------------+
    | blogDBTest         |
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    5 rows in set (0.03 sec)
    
  • 可见,mysql数据库环境准备好了,这里只做了单实例的

  • 注意,这个配置有很多的优化点,比如:集群副本,存储,密码加密等

    • 密码这块,参考下面的配置
  • 仅供参考,可关注我之前的博文以及持续关注 …

为应用程序配置 Service 和 Development


1 ) 先说明下博客应用的底层配置

  • 比如,当前博客应用的application.yml
    spring:thymeleaf:mode: HTMLprofiles:active: devcomment.avater: /images/avatar.png
    server:port: 5000
    
  • 可以看到应用程序启动后的端口是 5000
  • 继续看下其 Dockerfile 文件
    FROM openjdk:8-jdk-alpine3.7
    VOLUME /tmp
    ADD target/blog.jar /blog.jar
    EXPOSE 5000
    ENTRYPOINT ["java", "-jar", "/blog.jar"]
    
  • 可见容器内对外暴露的也是 5000 的端口
  • application-dev.yml 文件中做了一些数据库相关的配置,如下
    spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://${MYSQL_SERVER:localhost}:${MYSQL_PORT:3306}/${MYSQL_DB_NAME_TEST:blogDB}?useUnicode=true&characterEncoding=utf-8username: ${MYSQL_USER_TEST: root}password: ${MYSQL_PASSWORD_TEST: password}
    

2 )现在进入正题,应用程序的配置

  • $ vi app-blog.yaml 这个是博客应用程序的yaml文件

    apiVersion: v1
    kind: Service
    metadata:name: k8sblog
    spec:selector:app: k8sblogtype: NodePortports:- port: 5000targetPort: 5000nodePort: 30002---
    apiVersion: apps/v1
    kind: Deployment
    metadata:name: k8sblog
    spec:selector:matchLabels:app: k8sblogtemplate:metadata:labels:app: k8sblogspec:hostAliases:- ip: "10.211.10.2"hostnames:- "art.local" # 这里是我们的私有镜像中心containers:- name: k8sblogimage: 10.211.10.2:8081/docker-local/k8sblog:1.1ports:- containerPort: 5000env:- name: MYSQL_PORTvalue: "30306"- name: MYSQL_SERVERvalue: "node1.k8s"- name: MYSQL_DB_NAME_TESTvalue: blogDB- name: MYSQL_USER_TESTvalue: "root"- name: MYSQL_PASSWORD_TESTvalueFrom:secretKeyRef:name: mysql-password-testkey: MYSQL_PASSWORD_TESTimagePullSecrets:- name: regcred-local
    
  • 这里的密码加密的生成,这里上面的可以进行参考,之前博文也有其他方式,请持续关注

    • $ kubectl create secret generic mysql-password-test --from-literal=MYSQL_PASSWORD_TEST=password
  • $ kubectl create -f app-blog.yaml 创建

  • $ kubectl get po 查看app成功运行

  • 访问: http://node1.k8s:30002

  • 以上仅仅是一种演示,仅供参考

从私有镜像中心拉取/同步应用镜像


1 ) 拉取

  • 从上面的yaml中,可以看到,image: 10.211.10.2:8081/docker-local/k8sblog:1.1 这个配置
  • 这个就是私有镜像中心拉取的

2 )上传同步

  • 当应用程序修改源码后,需要重新打包, 重新将镜像传到镜像中心
  • $ mvn package
  • $ docker build -t 10.211.10.2:8081/docker-local/k8sblog:1.1 .
  • $ docker push 10.211.10.2:8081/docker-local/k8sblog:1.1
  • 注意,每次发版都要升级版本

3 )关于设置镜像拉取密码

  • 从上面可以看到, 有如下配置

    imagePullSecrets:
    - name: regcred-local
    
  • 这个就是在私有镜像中心设置的拉取镜像时的密码

  • $ kubectl create secret docker-registry regcred-local --docker-server=10.211.10.2:8081 --docker-username=admin --docker-password=password --docker-email=xxx@qq.com

    • 这里 regcred-local 就代表你的用户名和密码加密后的code
    • $ kubectl describe secret regcred-local 可以看到加密了和之前的其他secret 一样的效果

空间隔离


1 ) 关于空间隔离

  • 空间的隔离,一般都是指的是 namespace
  • default 命名空间可以用于测试,测试完成后需要归类到某个命名空间下
  • 之前所有的 pod 都是运行在 default 命名空间中的
  • $ kubectl get ns 查看所有命名空间
  • $ kubectl create ns test 创建 test 命名空间

2 )创建相关环境的秘钥

  • $ kubectl create secret generic mysql-password-test --from-literal=MYSQL_PASSWORD_TEST=password -n test
    • 创建 test 环境命名空间的 mysql 秘钥
  • $ kubectl create secret docker-registry regcred-local --docker-server=10.211.10.2:8081 --docker-username=admin --docker-password=password --docker-email=xxx@qq.com -n test
    • 创建 test 环境命名空间的 拉取镜像的 秘钥
  • 同时,我们可以在上述 yaml 配置下的 metadata 中添加命名空间
    metadata:namespace: test
    
  • $ kubectl get secret -n test 查看test空间下创建的所有秘钥

私有镜像仓库管理

  • 在本地研发测试的时候,不是直接部署到 docker-test, docker-prod
  • 可以在local本地建空间来测试,比如在 docker-local下继续建
    • docker-local-test
    • docker-local-prod
  • 这样在研发的时候就可以进行本地测试 test 和 prod了
  • 同样,在 yaml 中对应的镜像地址可以修改,之前是这样的
    • $ 10.211.10.2:8081/docker-local/k8sblog:1.1
  • 现在没有必要改成如下的配置
    • $ 10.211.10.2:8081/docker-local-test/k8sblog:1.1
    • $ 10.211.10.2:8081/docker-local-prod/k8sblog:1.1
  • 只需要这样,使用虚拟镜像地址
    • $ 10.211.10.2:8081/docker/k8sblog:1.1
    • 注意,所有的仓库都在 docker 组下
    • 可以在 Set Me Up 中设置
  • 注意,实际使用中需要使用 API 和脚本去做镜像从一个仓库拷贝到另一个仓库的操作

http://www.mrgr.cn/p/27126538

相关文章

[1678]旅游景点信息Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 旅游景点信息管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql…

芯片与扫地机器人

芯片与扫地机器人石头科技在V20扫地机器人上采用了石头系列产品中首创的“PreciSense创新石头星阵领航系统”避障方案,即3D ToF+RGB的动态避障模式,这也是石头首款搭载“双光源固态激光雷达导航避障”的扫地机器人产品。石头V20的避障系统由两颗可以实现38400Hz的超精准建图采…

[软件工具]批量根据文件名查找PDF文件复制到指定的地方,如何批量查找文件复制,多个文件一起查找复制

多个文件目录下有多个PDF, 如何根据文件名一个清单&#xff0c;一次性查找多个PDF复制保存 如图所示下面有7个文件夹&#xff0c;每个文件夹里面有几百上千PDF文件 如何从上千个PDF文件中一次性快速找到我们要的文件呢 &#xff1f; 我们需要找到文件名是这样的PDF&#xff0…

阿里面试:事务ACID,底层是如何实现的?

文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备 免费赠送 :《尼恩技术圣经+高并发系列PDF》 ,帮你 实现技术自由,…

1. 深度学习笔记--神经网络中常见的激活函数

1. 介绍 每个激活函数的输入都是一个数字&#xff0c;然后对其进行某种固定的数学操作。激活函数给神经元引入了非线性因素&#xff0c;如果不用激活函数的话&#xff0c;无论神经网络有多少层&#xff0c;输出都是输入的线性组合。激活函数的意义在于它能够引入非线性特性&am…

14_Scala面向对象编程_属性

文章目录 属性1.类中属性声明2.系统默认赋值3.BeanProperty4.整体代码如下 属性 1.类中属性声明 // 1.给Scala声明属性&#xff1b;var name :String "zhangsan"val age :Int 302.系统默认赋值 scala由于初始化变量必须赋值&#xff0c;为了解决此问题可以采…

二、VLAN原理和配置

vlan不是协议&#xff0c;是一个技术&#xff0c;虚拟局域网技术&#xff0c;基于802.1q协议。 vlan&#xff08;虚拟局域网&#xff09;&#xff0c;将一个物理的局域网在逻辑上划分成多个广播域的技术。 目录 1.冲突域和广播域 概念 范围 2.以太网帧格式 3.以太网帧封装…

docker学习笔记3:VmWare CentOS7安装与静态ip配置

文章目录 一、安装CentOS71、下载centos镜像2、安装二、设置静态ip三、xshell连接centos本专栏的docker环境是在centos7里安装,因此首先需要会安装centos虚拟机。 本篇博客介绍如何在vm虚拟机里安装centos7。 一、安装CentOS7 1、下载centos镜像 推荐清华源,下载如下版本 …

golang学习笔记(内存模型和分配机制)

操作系统的存储管理 虚拟内存管理 虚拟内存是一种内存管理技术&#xff0c;它允许操作系统为每个进程提供一个比实际物理内存更大的地址空间。这个地址空间被称为虚拟地址空间&#xff0c;而实际的物理内存则被称为物理地址空间。使用虚拟内存有以下几点好处&#xff1a; 内…

多器官和多模态图像的通用异常检测模型-不受特定模型约束

文章目录 A Model-Agnostic Framework for Universal Anomaly Detection of Multi-organ and Multi-modal Images摘要方法实验结果 A Model-Agnostic Framework for Universal Anomaly Detection of Multi-organ and Multi-modal Images 摘要 背景与挑战&#xff1a;深度学习在…

anaconda下载keras包

——anaconda prompt中下载 打开anaconda prompt,切换到/激活对应的环境 通过 conda install -c conda-forge keras 安装 keras 通过 pip list 查看现有列表确认是否安装成功——pycharm中下载 点击python软件包,输入需要下载的软件包,选择版本后安装即可

仿知乎网站问答源码,开源版

仿知乎网站问答源码&#xff0c;开源版 需要一定动手能力 发文章&#xff0c;发视频&#xff0c;发想法&#xff0c;提问回答&#xff0c;注册登录 开发环境 使用技术&#xff1a;springbootthymeleafRedis&#xff1b; 开发环境&#xff1a;tomcat8.0&#xff0c;jdk8.0, ID…

DevOps,CI,CD,自动化简单介绍

原创 追逐时光者前言随着企业应用的不断迭代和发展,应用的版本发布可能涉及了多个技术团队(如PC端,移动端,小程序端等)。随之而来的问题是应用发布也成为了一项高风险,高压力的操作过程。并且应用的开发迭代的沟通,测试成本也大大的变得不可控。这时候就出现了DevOps管…

java中http调用组件深入详解

目录 一、前言 二、http调用概述 2.1 什么是http调用 2.1.1 http调用步骤 2.2 HTTP调用特点 2.3 HTTP调用应用场景 三、微服务场景下http调用概述 3.1 微服务开发中http调用场景 3.2 微服务组件中http的应用 四、常用的http调用组件 4.1 java中常用的http组件介绍 4…

数据结构===二叉树

文章目录 概要二叉树的概念分类存储遍历前序中序后序 小结 概要 简单写下二叉树都有哪些内容&#xff0c;这篇文章要写什么 二叉树的概念分类&#xff0c;都有哪些二叉树遍历 对一个数据结构&#xff0c;最先入手的都是定义&#xff0c;然后才会有哪些分类&#xff0c;对二叉…

File contains parsing errors: file:///etc/yum.repos.d/nginx.repo报错解决,文件配置出现问题

执行yum指令出现以下错误&#xff1a; 解决方案&#xff1a;yum的配置文件出现问题&#xff0c; 先删除yum.repos.d目录下所有文件 rm -f /etc/yum.repos.d/* 然后重新下载阿里的资源 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.…

【Mac】Lightroom Classic 2024 v13.1安装教程

软件介绍 Lightroom Classic 2024是Adobe公司推出的一款专业的数字图像处理软件&#xff0c;旨在为摄影师提供强大的工具和功能&#xff0c;以管理、编辑和分享他们的照片作品。以下是Lightroom Classic 2024的主要特点和功能&#xff1a; 数字照片管理&#xff1a; 提供直观…

SpringData JPA - ORM 框架下,打造高效数据访问层

目录 一、SpringData JPA 概述 1.1、什么是 JPA 1.2、什么是 ORM 1.3、什么是 Hibernate 1.4、JPA 和 Hibernate 的关系 1.5、JPA 的优势 二、SpringData JPA 实战开发 2.1、依赖 2.2、配置文件 2.3、启动类 2.4、创建实体 2.5、基于 JpaRepository 的 CRUD 三、…

【软件设计师】上午题

【软考】软件设计师plus 「软件设计师」 2022年下半年上午真题解析视频 计算机系统知识 22下 考点&#xff1a;指令系统之CISC vs RISC RISC指令系统整体特点是简单、精简 》指令种类少&#xff0c;但是指令功能强 考点&#xff1a;计算机系统组成 A属于运算器&#xff0c;…

图文并茂手把手教你安装windows搭建sqlserver(SqlServer数据库安装保姆级教程)

sqlserver是什么 SQL Server 是由美国微软公司(Microsoft)开发的一款关系型数据库管理系统(RDBMS)。作为全球主流的数据库平台之一,SQL Server 设计用于高效管理和处理大量结构化数据,支持各种规模的应用场景,从个人电脑到企业级数据中心,乃至云端部署。 SQL Server 数…