k3s(1)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 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 ~]#
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
存储 Kubernetes 关系型数据库
|
Java 数据库连接 API
Maven - 基础入门与安装配置
Maven - 基础入门与安装配置
138 0
|
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...
11433 0
|
Kubernetes 网络安全 数据安全/隐私保护
k3s部署全过程
k3s部署全过程
635 0
k3s部署全过程
|
7月前
|
网络协议 API 数据安全/隐私保护
Rancher 系列文章 -RHEL7.8 离线有代理条件下安装单节点 Rancher
Rancher 系列文章 -RHEL7.8 离线有代理条件下安装单节点 Rancher
|
7月前
|
存储 Java 编译器
每日一博 - Protobuf vs. Protostuff:性能、易用性和适用场景分析
每日一博 - Protobuf vs. Protostuff:性能、易用性和适用场景分析
305 0
|
Java jenkins 持续交付
jenkins构建jar包为镜像并上传到docker仓库
jenkins构建jar包为镜像并上传到docker仓库
268 0
|
7月前
|
存储 弹性计算 运维
使用日志服务SLS进行日志治理最佳实践
为面临日志管理难题的运维和开发人员提供使用日志服务SLS进行日志治理的最佳实践和核心步骤:规范日志格式、优化存储空间、使用日志服务构建运维平台。
560 0
使用日志服务SLS进行日志治理最佳实践
|
存储 Kubernetes 应用服务中间件
K8s不同node如何共享存储&&nfs 搭建(markdown版本)
K8s不同node如何共享存储&&nfs 搭建(markdown版本)
417 0