k3s(1)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: k3s(1)

Kubernetes基础(2)---使用k3s学习

运行有状态的应用

创建MySQL数据库

官方模板

首先从官网拿案例

  • 配置环境变量
apiVersion: v1
kind: Pod
metadata:
  name: envar-demo
  labels:
    purpose: demonstrate-envars
spec:
  containers:
  - name: envar-demo-container
    image: gcr.io/google-samples/node-hello:1.0
    env:
    - name: DEMO_GREETING
      value: "Hello from the environment"
    - name: DEMO_FAREWELL
      value: "Such a sweet sorrow"

简单修改一下

apiVersion: v1
kind: Pod
metadata:
  name: mysql-pod
  labels:
    app: mysql
spec:
  containers:
    - name: mysql
      image: mysql:5.7

设置密码

然后开始配置密码,数据持久化,端口

MySQL镜像里可以看到设置密码的变量,

apiVersion: v1
kind: Pod
metadata:
  name: mysql-pod
  labels:
    app: mysql
spec:
  containers:
    - name: mysql
      image: mysql:5.7
      env:
        - name: MYSQL_ROOT_PASSWORD
          value: "123456"

数据在容器中很容易丢失,无法保存,这里可以用挂载卷来实现保存到主机里


  • 挂载卷
  • 将数据存储在容器中,一旦容器被删除,数据也会被删除。
  • 将数据存储到卷(Volume)中,删除容器时,卷不会被删除。

hostPath卷

hostPath 卷将主机节点上的文件或目录挂载到 Pod 中。

hostPath配置示例

官方已经介绍的很清楚了,我们这里需要注意的是hostPath 卷指定 type

官方给了7个type,我们一般用的前5个

hostPath的type值:

DirectoryOrCreate

目录不存在则自动创建。

Directory

挂载已存在目录。不存在会报错。

FileOrCreate

文件不存在则自动创建。

不会自动创建文件的父目录,必须确保文件路径已经存在。

File

挂载已存在的文件。不存在会报错。

Socket

挂载 UNIX 套接字。例如挂载/var/run/docker.sock进程

把官方示例中我们需要的部分添加进来并修改

容器内的目录可以根据mysql的docker介绍

apiVersion: v1
kind: Pod
metadata:
  name: mysql-pod
  labels:
    app: mysql
spec:
  containers:
    - name: mysql
      image: mysql:5.7
      env:
        - name: MYSQL_ROOT_PASSWORD
          value: "123456"
      volumeMounts:
        - mountPath: /var/lib/mysql #容器中的目录
          name: data-volume
  volumes:
    - name: data-volume
      hostPath:
        # directory location on host
        path: /home/mysql/data
        # this field is optional
        type: DirectoryOrCreate

注意:hostPath 仅用于在单节点集群上进行开发和测试,不适用于多节点集群;

例如,当Pod被重新创建时,可能会被调度到与原先不同的节点上,导致新的Pod没有数据。

在多节点集群使用本地存储,可以使用local卷。

启动容器

[root@k8s mysql]# kubectl apply -f mysql-pod.yaml 
pod/mysql-pod created
[root@k8s mysql]# kubectl get pod -owide
NAME        READY   STATUS    RESTARTS   AGE     IP           NODE   NOMINATED NODE   READINESS GATES
mysql-pod   1/1     Running   0          2m41s   10.42.2.37   k8s2   <none>           <none>
[root@k8s mysql]# cd /home/mysql/data
-bash: cd: /home/mysql/data: 没有那个文件或目录

发现没有该目录,因为他创建到k8s2的主机里了

去k8s2主机查看,发现文件创建成功

[root@k8s2 ~]# cd /home/mysql/data
[root@k8s2 data]# ls
auto.cnf    client-cert.pem  ibdata1      ibtmp1              private_key.pem  server-key.pem
ca-key.pem  client-key.pem   ib_logfile0  mysql               public_key.pem   sys
ca.pem      ib_buffer_pool   ib_logfile1  performance_schema  server-cert.pem

可以进入容器使用mysql

[root@k8s ~]# kubectl get pod
NAME        READY   STATUS    RESTARTS        AGE
mysql-pod   1/1     Running   1 (2m54s ago)   2d8h
[root@k8s ~]# kubectl get pod -owide
NAME        READY   STATUS    RESTARTS        AGE    IP           NODE   NOMINATED NODE   READINESS GATES
mysql-pod   1/1     Running   1 (2m59s ago)   2d8h   10.42.2.39   k8s2   <none>           <none>
[root@k8s ~]# kubectl exec mysql-pod -it -- /bin/bash
root@mysql-pod:/# ls
bin   dev       entrypoint.sh  home  lib64  mnt  proc  run   srv  tmp  var
boot  docker-entrypoint-initdb.d  etc    lib   media  opt  root  sbin  sys  usr
root@mysql-pod:/# mysql -uroot -p123456 
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.36 MySQL Community Server (GPL)
Copyright (c) 2000, 2021, 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> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)
mysql> exit;
Bye
root@mysql-pod:/# exit
exit
[root@k8s ~]#
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
24天前
|
机器学习/深度学习 传感器 编解码
DINOv3上手指南:改变视觉模型使用方式,一个模型搞定分割、检测、深度估计
DINOv3是Meta推出的自监督视觉模型,支持冻结主干、仅训练轻量任务头即可在分割、深度估计等任务上达到SOTA,极大降低训练成本。其密集特征质量优异,适用于遥感、工业检测等多领域,真正实现“一个模型走天下”。
530 2
DINOv3上手指南:改变视觉模型使用方式,一个模型搞定分割、检测、深度估计
|
4月前
|
人工智能 自然语言处理 前端开发
Trae插件Builder模式深度测评:从编程助手到AI工程师的进化
Trae插件最新推出的Builder模式标志着AI辅助编程工具从简单的代码补全向“AI工程师”角色的转变。该模式允许开发者通过自然语言描述项目需求,自动生成完整的项目结构、代码文件和开发流程,支持VSCode、JetBrains IDE及在线Web版本。Builder模式的核心功能包括自然语言项目初始化、智能项目架构设计和多文件协调代码生成,显著提升了开发效率,降低了技术门槛。然而,它在处理复杂业务逻辑和高度定制化需求方面仍有局限。未来,Builder模式将集成云部署、测试套件生成和DevOps流水线等功能
1146 2
|
10月前
|
缓存 容器 Perl
【Azure Container App】Container Apps 设置延迟删除 (terminationGracePeriodSeconds) 的解释
terminationGracePeriodSeconds : 这个参数的定义是从pod收到terminated signal到最终shutdown的最大时间,这段时间是给pod中的application 缓冲时间用来处理链接关闭,应用清理缓存的;并不是从idel 到 pod被shutdown之间的时间;且是最大时间,意味着如果application 已经gracefully shutdown,POD可能被提前terminated.
230 3
|
网络协议 Java 测试技术
配置中心原理和选型:Disconf、Apollo、Spring Cloud Config 和 Nacos
学完注册中心,再看配置中心这块,感觉简单很多,因为很多知识原理是相辅相成的
8088 0
配置中心原理和选型:Disconf、Apollo、Spring Cloud Config 和 Nacos
|
JSON 移动开发 关系型数据库
WordPress Rest API 最细接口详解
通过接口的测试和了解,wp的主要功能包括:用户的登录注册、获取文章分类、获取文章详情、新增|修改|删除文章、评论文章、点赞文章和评论。 那么可以实现移动端资讯类app的基本应用。如果个人|团队想构建一个比较简单的资讯类项目的话,应用wp框架是一个比较不错的选择。
5001 0
WordPress Rest API 最细接口详解
|
算法 搜索推荐 数据挖掘
【可套用】15个应用场景的算法实现
那我们还需要去研究算法吗,答案是需要,在很多业务场景中,成熟的算法可以提高效率,减少不必要的问题出现,规避风险。
313 0
|
Python
Python内置函数map、split、join讲解
Python内置函数map、split、join讲解
888 0
|
小程序 JavaScript
微信小程序:如何在{{}}中使用函数?WXML+WXS
微信小程序:如何在{{}}中使用函数?WXML+WXS
1185 0
|
安全 Cloud Native Java
如何降低微服务复杂度丨云栖大会微服务主题分享实录
本文整理自阿里云资深技术专家、中间件负责人谢吉宝在2023云栖大会《极简微服务模式,降低微服务复杂度的最佳实践》的分享。
|
存储 关系型数据库 Go
深入理解 PostgreSQL 中的 MVCC(多版本并发控制)机制
深入理解 PostgreSQL 中的 MVCC(多版本并发控制)机制
478 0