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

Kubernetes环境搭建(手动K8s集群安装配置、服务部署和管理使用详细步骤,入门K8s容器云平台架构) Kubernetes集群搭建详细过程前言搭建步骤一、各节点基础配置二、制作CA证书三、配置etcd四、在master节点上配置Kubernetes API服务五、在master节点上部署Controller Manager服务、Kubernetes Scheduler六、在master节点上部署kubectl命令行工具七、在Node节点上部署kubelet八、在Node节点上部署kube-prox... 阅读详情

使用 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: 3306
          nodePort: 30306
      selector:
        app: mysql
      type: NodePort
    
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: mysql
    spec:
      serviceName: "mysql"
      replicas: 1 # 虽然您要求不要副本,但StatefulSet通常需要至少一个副本
      selector:
        matchLabels:
          app: mysql
      template:
        metadata:
          labels:
            app: mysql
        spec:
          containers:
          - name: mysql
            image: mysql:8.0.36
            env:
            - name: MYSQL_ROOT_PASSWORD
              value: "password"
            ports:
            - containerPort: 3306
              name: mysql
            volumeMounts:
            - name: mysql-config
              mountPath: /etc/mysql/conf.d
            - name: mysql-data
              mountPath: /var/lib/mysql
          volumes:
          - name: mysql-config
            hostPath:
              path: /tmp/mysql/conf.d
              type: DirectoryOrCreate
          - name: mysql-data
            hostPath:
              path: /tmp/mysql/data
              type: 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          27s
    
    NAME                     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   27s
    
    NAME                     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 - GPL
    
    Copyright (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: HTML
      profiles:
        active: dev
    
    comment.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.Driver
        url: jdbc:mysql://${MYSQL_SERVER:localhost}:${MYSQL_PORT:3306}/${MYSQL_DB_NAME_TEST:blogDB}?useUnicode=true&characterEncoding=utf-8
        username: ${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: k8sblog
      type: NodePort
      ports:
      - port: 5000
        targetPort: 5000
        nodePort: 30002
        
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: k8sblog
    spec:
      selector:
        matchLabels:
          app: k8sblog
      template:
        metadata:
          labels:
            app: k8sblog
        spec:
          hostAliases:
          - ip: "10.211.10.2"
            hostnames:
            - "art.local" # 这里是我们的私有镜像中心
          containers:
          - name: k8sblog
            image: 10.211.10.2:8081/docker-local/k8sblog:1.1
            ports:
            - containerPort: 5000
            env:
              - name: MYSQL_PORT
                value: "30306"
              - name: MYSQL_SERVER
                value: "node1.k8s"
              - name: MYSQL_DB_NAME_TEST
                value: blogDB
              - name: MYSQL_USER_TEST
                value: "root"
              - name: MYSQL_PASSWORD_TEST
                valueFrom:
                    secretKeyRef:
                      name: mysql-password-test
                      key: MYSQL_PASSWORD_TEST
          imagePullSecrets:
          - 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 和脚本去做镜像从一个仓库拷贝到另一个仓库的操作
【生产环境K8S从搭建到运维的实录(一)】可以作为生产环境的K8S系统构成 【生产环境K8S从搭建到运维的实录(一)】可以作为生产环境的K8S系统构成 1.前言 一次生产环境的从Kubernetes环境的搭建到运维的经历,期间遇到很多问题、知识点、注意点,通过一个连载的方式尽可能把所有的东西都总结出来,分享给需要的人。希望能够帮助到更多的人,也希望跟大家一起探讨进步。 实际生产环境的所有机器都是在公司自己的私有云平台上搭建的虚拟机,只是为了更快的画出更漂亮的图,我们使用了一些AWS图例。请不要在意是再什么平台上搭建,我们想传达的只是设计思想。 所有文章都是我们原创,我们小组的名字是 阅读详情

相关推荐

运维环境部署

服务环境部署与配置 前言:此文档以centos7系统为基础环境,完成基础环境搭建后的配置 一、Docker部署与配置 (一)安装yum-utils工具:sudo yum install -y yum-utils(二)设置centos7与docker的阿里yum源 1)使用yum,安装wget命令:2)使用mv将原yum源备份: mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak3)使用wget下载阿里yum

weixin_46061526的博客 2353

k8s使用statefulset部署mysql一主多从集群

k8s使用statefulset部署mysql一主多从集群

Jacson__的博客 2620

Docker部署Kubernetes容器化应用详解:从镜像构建到集群部署

本文详细介绍了在Linux环境下通过Docker与Kubernetes(K8s)构建容器化应用的完整流程。主要内容包括:环境准备(系统配置、Docker和K8s组件安装)、集群搭建(单节点/多节点部署)、镜像构建(Dockerfile编写与安全扫描)、应用部署(Deployment/Service/Ingress配置)以及生产级优化方案(资源调度、HPA、监控等)。提供了从开发到生产的全链路实践指南,包含可执行的代码示例和关键配置要点,帮助读者快速实现容器化应用的高效管理与弹性扩展。

weixin_42593797的博客 2435

基于K8S的StatefulSet部署MySQL集群

环境: 名称 版本 其他 K8S 1.20.4 mysql 5.7 一主二从 nfs服务器 172.16.201.209 # 采用NFS存储卷的方式 持久化存储mysql数据目录 需求: 展示如何使用 StatefulSet 控制器运行一个有状态

srebro.cn | 运维小弟 2895

Kubernetes (K8s) 运维实战手册:小白必看

实战指南:从零搭建生产级K8s环境 本指南以Go电商微服务为例,详细介绍在云上搭建生产级K8s环境的完整流程: 集群搭建 提供阿里云ACK和Google GKE两种选择方案 配置kubectl工具并完成集群连接验证 容器化部署 使用多阶段构建优化Go服务Docker镜像 推送镜像至ACR/GCR等云仓库 强调安全最佳实践(非root用户、静态编译) 核心工具链安装 通过Helm安装Nginx Ingress Controller 配置Cert-Manager实现自动证书管理 提供常见问题排查方法(如LB p

m0_68330110的博客 1281

用虚拟机搭建Kubernetes集群

有状态服务:它们都需要实时地进行数据的更新以及存储,把它们摘出集群之后再放回来,就没办法继续工作了,典型:mysql,mongo。 无状态服务:即没有对应的存储需要实时地保留,或者说是把它摘出来以后,经过一段时间之后再次运行会正常为我们提供服务。典型:docker 高可用集群副本最好是 >= 3 的奇数个 APISERVER:所有服务访问统一入口。 ControllerManager:维持副本期望数目。(少则建多则抹) Scheduler:负责介绍任务,选择合适的节点进行分配任务。 Etcd:键值对

qq_37623764的博客 4174

《K8S集群运维指南》

《K8S集群运维指南》

东城绝神 8179

Windows下Fortran调用CGNS库的完整踩坑实录:从HDF5、CMake到VS2019+IVF2020的保姆级配置

本文详细记录了在Windows环境下使用Fortran调用CGNS库的完整配置过程,涵盖HDF5安装、CMake配置、VS2019与IVF2020集成等关键步骤。通过实战经验分享,帮助开发者解决常见编译错误和链接问题,实现高效的Fortran与CGNS库集成。

weixin_28707739的博客 350

mysql on k8s statefulset部署实践

mysql on k8s statefulset部署实践

雪辉博客 1258

防火墙学习5---虚拟系统和跟系统通过路由表互访

虚拟系统与跟系统互访可分为虚拟系统访问根系统和跟系统访问虚拟系统。

weixin_48030849的博客 1032

拯救者R7000用户实测:用华为电脑管家11.0版搞定MatePad Pro多屏协同(附驱动与显卡避坑指南)

本文详细介绍了如何在非华为笔记本联想拯救者R7000上安装华为电脑管家11.0版,实现与MatePad Pro的多屏协同功能。从驱动优化到显卡配置,提供了全面的避坑指南和实用技巧,帮助用户解决连接失败等常见问题,提升跨设备生产力体验。

weixin_30788619的博客 398

应用上云-在kubernetes中部署MySQL

在kubernetes中部署MySQL,对比使用Deployment和StatefulSet部署MySQL的区别。

weixin_45093078的博客 1456

Windows电脑如何用MobaXterm连接宇树G1机器人?保姆级SSH配置指南

本文提供了一份详细的保姆级教程,指导Windows用户使用MobaXterm通过SSH连接宇树G1机器人。内容涵盖从物理网络配置、MobaXterm安装与SSH会话创建,到文件传输、X11转发等高级功能,并包含常见问题排查与安全加固建议,帮助开发者快速建立稳定可靠的远程开发连接。

purple的博客 878

0 基础自学阿里云运维 K8s 全流程指南(带注释命令 + 可落地练习项目)

也是云原生技术的核心标准,用于自动化部署、扩缩容、运维和管理容器化应用。名称 “K8s” 是缩写,用数字 8 替代 “Kubernetes” 中间 8 个字母(ubernete)。,是 Google 开源的。

m0_56252021的博客 183

学Simulink——基于扩展卡尔曼滤波(EKF)的列车牵引电机转子温度在线估计仿真

本文介绍了一种基于扩展卡尔曼滤波(EKF)的列车牵引电机转子温度在线估计方法,通过Simulink建模实现。文章首先阐述了EKF在估计电机转子温度中的优势,即利用易测量信号(如电流、电压、转速)在线估计难以直接测量的转子温度,并分析了温升对电机性能的影响。随后详细讲解了电机热电增广模型的构建,包括定子电阻温度关系、一阶热近似模型和PMSM的dq轴方程。接着,文章提供了Simulink建模的详细步骤,包括PMSM+FOC电流环的搭建、EKF算法的实现(推荐使用ExtendedKalmanFilter块或MAT

xiaoheshang_123的博客 58

用 SAML 2.0 Bearer Assertion 配置 ABAP OAuth 2.0 令牌交换

摘要: SAP系统集成中,身份跨系统传递是关键挑战。OAuth 2.0的SAML 2.0 Bearer Assertion grant机制通过SAML断言换取访问令牌,实现安全身份传递。配置核心在ABAP的SOAUTH2事务码,需绑定可信SAML身份提供商(IdP)并指定访问范围。实际应用中,需确保SSL加密传输,正确配置SAML IdP信任关系,并为OAuth客户端分配专用系统用户。常见问题包括证书不匹配、权限配置不当等,需分层控制权限边界以保障安全。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 837

Kubernetes 系列 | k8s入门运维

可以通过查看Pod的Condition列表了解更多信息,pod的Condition指示pod是否已达到某个状态,以及为什么会这样,与状态相反,一个Pod同时具有多个Conditions。

weixin_48711696的博客 7413

姿态传感器/陀螺仪之SC7A20HTR是应用驱动程序设计

define SC7A20_CTRL1_PM_100HZ (0x5 << 4) // 正常模式,100Hz输出数据速率(ODR)// 用于存储6字节的原始数据(X_L, X_H, Y_L, Y_H, Z_L, Z_H)#define SC7A20_WHO_AM_I_VALUE 0x11 // 读取WHO_AM_I寄存器应该返回的值。// 但HAL_I2C_Mem_Read按顺序读,data[0]是X_L(低8位),data[1]是X_H(高8位)MX_I2C1_Init();

corlin6688的博客 762

kubernetes(k8s)环境搭建及部署

kubernetes(k8s)环境搭建及部署 文章目录kubernetes(k8s)环境搭建及部署前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

海贼王的博客 6672

Android实现TextToSpeech控件实现语音播报--朗读文字 (附完整源码)

Android实现TextToSpeech控件实现语音播报--朗读文字 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1121

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

时序数据库 Apache IoTDB 实战:基于 Kubernetes 的部署运维全指南

时序数据库 Apache IoTDB 实战:基于 Kubernetes 的部署运维全指南

wei_shuo的博客 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

K8S(Kubernetes)概念、原理及部署过程

目录: 云计算概念和原理 云计算分类 什么是K8S K8S部署 云计算概念和原理 What 云计算是将硬件服务器、网络设备、网络资源、操作系统、应用程序统一的管理和调度,将所有的资源统一的按需分配,租户可以根据自己的需求来按需购买和使用 云计算重点强调的是资源池、租户概念,资源池中资源可以分配或者租用给租户(企业内部、互联网用户),可以根据需求直接去购买或者租用,对于租户来讲,不需要关...

番茄炒蛋君的博客 1万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

k8s搭建运维监控一体化教程:全面掌握 Kubernetes 技术的实践指南

k8s搭建运维监控一体化教程:全面掌握 Kubernetes 技术的实践指南 【下载地址】k8s搭建运维监控一体化教程 本项目提供了一份全面的k8s搭建与运维监控一体化教程,从环境规划到具体组件的搭建与配置,涵盖ETCD、Nginx、Keepalived等核心技术的部署。教程详细讲解了K8S集群的搭建过程,并介绍了Har...

gitblog_06765的博客 875

通俗易懂 k8s (1):kubernetes 架构及应用场景

文章目录1. k8s 在企业中的应用场景1.1 自动化运维平台1.2 充分利用服务器资源1.3 服务无缝迁移2. 服务部署模式变迁 & 服务部署变化问题的思考2.1 服务部署模式是如何变迁的2.2 服务部署模式变化,带来了哪些问题3. 云架构 & 云原生3.1 云 和 k8s 的关系3.2 云架构3.3 云原生4. kubernetes 架构原理4.1 k8s 的历史4.2 k8s 的架构4.2.1 k8s 集群(Cluster)4.2.2 master 节点4.2.3 node 节点4.3

早睡早起 2万+

K8S集群部署详解手册:掌握Kubernetes部署要领,提升运维效率

K8S集群部署详解手册:掌握Kubernetes部署要领,提升运维效率 去发现同类优质开源项目:https://gitcode.com/ K8S集群部署详解手册,助您轻松驾驭Kubernetes集群部署。 项目介绍 K8S集群部署详解手册项目,旨在为用户提供一份详尽的Kubernetes集群部署指南。项目包含了一份名为《搭建一个完整的K8S集群部署文档.docx》的文档,内容涵盖了从基础环境准备到...

gitblog_06773的博客 707

Kubernetes运维之使用Prometheus全方位监控K8S

目录: Prometheus架构 K8S监控指标及实现思路 在K8S平台部署Prometheus 基于K8S服务发现的配置解析 在K8S平台部署Grafana 监控K8S集群中Pod、Node、资源对象 使用Grafana可视化展示Prometheus监控数据 告警规则与告警通知 说在前面的话,现在监控首选的话,肯定是Prometheus+Grafana,也就是很多大型公司也都在用,像RBM,360,网易,基本都是使用这一套监控系统。 一、Prometheus 是什么? Prometheu

Vic的博客 2万+
上一篇: K8s: 公有镜像中心和私有镜像中心的搭建
下一篇: K8s: Helm包管理工具的应用以及项目分环境部署
Wang's Blog
博客等级 码龄12年 7433粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值