k3s(1)

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: 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 ~]#
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
存储 Kubernetes 关系型数据库
|
8月前
|
数据安全/隐私保护 Docker 容器
minio
minio
237 0
|
3月前
|
并行计算 Ubuntu Docker
apollo快速入门之安装指南
apollo快速入门之安装指南
65 3
|
10月前
|
Kubernetes 容器 Perl
【kubernetes】解决: kubelet Failed to create pod sandbox: rpc error: code = Unknown desc = faile...
【kubernetes】解决: kubelet Failed to create pod sandbox: rpc error: code = Unknown desc = faile...
8416 0
|
Kubernetes 网络安全 数据安全/隐私保护
k3s部署全过程
k3s部署全过程
537 0
k3s部署全过程
|
3月前
|
缓存 JSON Java
京东零售 / hotkey 热点key探测工具使用
京东零售 / hotkey 热点key探测工具使用
76 0
|
3月前
|
自动驾驶 Ubuntu Docker
Apollo自动驾驶:引领未来的智能出行
Apollo自动驾驶:引领未来的智能出行
|
8月前
|
Java Maven
Native-java(4)
Native-java(4)
36 1
|
8月前
线上排查堆栈
线上排查堆栈
44 1
|
8月前
|
Java Linux Maven
Native-java(5)
Native-java(5)
42 1