k3s(1)

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: 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
目录
相关文章
|
JSON 移动开发 关系型数据库
WordPress Rest API 最细接口详解
通过接口的测试和了解,wp的主要功能包括:用户的登录注册、获取文章分类、获取文章详情、新增|修改|删除文章、评论文章、点赞文章和评论。 那么可以实现移动端资讯类app的基本应用。如果个人|团队想构建一个比较简单的资讯类项目的话,应用wp框架是一个比较不错的选择。
5439 0
WordPress Rest API 最细接口详解
|
ARouter 关系型数据库 MySQL
Django项目同时连接多个不同的数据库(7)
【7月更文挑战第7天】在Django项目中配置连接多个数据库,你需要: 1. 在`settings.py`中配置多个数据库, 2. 在`settings.py`内设置数据库路由,指定每个应用使用的数据库,
503 2
|
机器学习/深度学习 人工智能 自然语言处理
什么是深度学习模型?如何部署它?
【8月更文挑战第23天】
1129 0
|
算法 搜索推荐 数据挖掘
【可套用】15个应用场景的算法实现
那我们还需要去研究算法吗,答案是需要,在很多业务场景中,成熟的算法可以提高效率,减少不必要的问题出现,规避风险。
549 0
|
Python
Python内置函数map、split、join讲解
Python内置函数map、split、join讲解
1761 0
|
XML 消息中间件 传感器
HTTP 与 MQTT:为您的 IoT 项目选择最佳协议
HTTP 与 MQTT:为您的 IoT 项目选择最佳协议
2895 2
|
存储 关系型数据库 Go
深入理解 PostgreSQL 中的 MVCC(多版本并发控制)机制
深入理解 PostgreSQL 中的 MVCC(多版本并发控制)机制
718 0
|
边缘计算 Kubernetes 物联网
k3s 离线部署指南
k3s 离线部署指南
|
存储 安全 关系型数据库
阿里云容器镜像服务ACR概述(一)
阿里云容器镜像服务ACR概述(一)

热门文章

最新文章