通过搭建MySQL掌握k8s(Kubernetes)重要概念(下):参数配置
本文通过搭建MySQL环境来了解k8s的重要概念,包括持久卷,网络和参数配置。这是下篇,专门讲解参数配置。如果你有些地方不能完全看明白,请先看上篇"通过搭建MySQL掌握k8s(Kubernetes)重要概念(上):网络与持久卷"。
配置参数:
参数配置是K8s里比较重要的一个概念,它包含了下面三个部分:
- ConfigMap:是用来保存共享配置数据的。当你需要在不同的配置文件之间共享数据时,你可以把这些数据以键值对的形式存储在configMap中。详情请见"Configure a Pod to Use a ConfigMap"
- Secret:它跟configMap的作用很类似,但是用来存储保密信息的,例如数据库的口令。详情请见"Secrets"
- Environment Variable: 它就是我们所熟悉的环境变量,一般是由系统来定义。不同的系统例如Linux和Windows都有自己的方法来定义环境变量。k8s的环境变量主要是用来向容器传递数据的。详情请见"Container Environment Variables"
configMap:
下面就是configMap(mysql-config.yaml)的配置文件。它的结构很简单,最重要的就是data部分,里面是键、值列表。这是比较简单的一个例子,复杂的还可以包含文件和键、值列表的组合。你可以把configMap单独放在一个文件里,这样调试起来比较方便,也可以把它和部署(Deployment)放在一起,这样运行起来比较方便。
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-config # name of ConfigMap, referenced in other files
data:
db-host: mysql # host address of mysql server
db-name: service_config # name of the database
configMap的运行命令与其它对象不同,例如一般的运行命令是“kubectl apply -f mysql-volume.yaml”或“kubectl create -f mysql-volume.yaml”,你只要给出配置文件名就行了,不需要给出要创建的对象的类别(它是自动识别的)和名字,因为在配置文件里已经有了(例如“kind: ConfigMap”,就表示对象类别是“ConfigMap”。“name: mysql-config” 就表示要创建的configMap的名字是“mysql-config”)。但configMap的创建命令是"kubectl create configmap [map-name] [data-source]",对象类别和名字都要在命令行里明确给出,[map-name] 是要创建的configMap的名字。“[data-source]”是数据来源文件的文件名(不是配置文件的文件名),我们上面提到过,configMap可以包含别的文件里的键、值列表,“[data-source]”就是“别的文件”的文件名。注意这个命令里就根本没有提到配置文件。我不太喜欢这种方式,因为当你在部署配置里引用键、值对时,需要给出configMap的名字,如果它不是存在文件里,而是在创建时敲入,这样很容易出错。
因此我还是采用了通用的创建命令“kubectl apply -f mysql-config.yaml”来创建configMap,这种方式在k8s的官方文档里是没有的,但它也是可行的。不过缺点是不能包含别的文件。
键入“kubectl get configMap”来显示已创建好的configMap。
vagrant@ubuntu-xenial:/var/log$ kubectl get configMap
NAME DATA AGE
mysql-config 2 11h
键入“kubectl describe configMap”来显示configMap的详细信息。
vagrant@ubuntu-xenial:/var/log$ kubectl describe configMap
Name: mysql-config
Namespace: default
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","data":{"db-host":"mysql","db-name":"service_config"},"kind":"ConfigMap","metadata":{"annotations":{},"name":"mysql-con...
Data
====
db-host:
----
mysql
db-name:
----
service_config
Events: <none>
secret:
下面就是secret的配置文件(mysql-secret.yaml),它与configMap很像,在“data”下面就是键、值列表,只不过里面的键的值是经过base64编码的(例如“cm9vdA==
”)。你可以在Linux里运行命令“echo -n dbuser | base64”获得“dbuser”的编码,输出是“ZGJ1c2Vy”, 再把它写入secret里去。在下面文件里存储了数据库用户名和口令。
apiVersion: v1
kind: Secret
metadata:
name: mysql-secret
data:
mysql-user-root-pwd: cm9vdA== # database password for "root"
mysql-user-dbuser-name: ZGJ1c2Vy # database user name for "dbuser"
mysql-user-dbuser-pwd: ZGJ1c2Vy # database password for "dbuser"
secret的运行方式与其他对象是一样的, 创建之后可以用“kubectl describe secret mysql-secret”命令显示secret详细信息,其中“mysql-secret”是secret的名字。因为值是经过base64编码的,这里只显示了字节数,而没有显示值。
vagrant@ubuntu-xenial:/var/log$ kubectl describe secret mysql-secret
Name: mysql-secret
Namespace: default
Labels: <none>
Annotations:
Type: Opaque
Data
====
mysql-user-dbuser-name: 6 bytes
mysql-user-dbuser-pwd: 6 bytes
mysql-user-root-pwd: 4 bytes
值得注意的是secret只是对数据进行了编码,并没有加密。因此你可以通过反编码获得原值,因此它并不安全。如果要想安全,你还要对他另外加密。
Environment Variable:
环境变量一般是在部署里面定义的,没有单独的配置文件。下面是部署配置文件里的环境变量的片段。“MYSQL_ROOT_PASSWORD”是环境变量名,“secretKeyRef”说明它的值来自于secret,“name: mysql-secret”是secret的名字,“key: mysql-user-root-pwd”是secret里的键名,它的最终含义就是环境变量“MYSQL_ROOT_PASSWORD”的值是由“mysql-user-root-pwd”来定义,而“mysql-user-root-pwd”是secret里面的一个键。
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: mysql-user-root-pwd
下面是另一个定义环境变量的片段,与上面的类似,只不过它的键值来自于configMap,而不是secret。
env:
- name: MYSQL_DATABASE
valueFrom:
configMapKeyRef:
name: mysql-config
key: db-name
部署文件:
下面是引用了configMap和secret的部署文件,它与前面提到的部署文件很类似,只不过把共享的数据提取了出来放到了configMap和secret里面。
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql-deployment
labels:
app: mysql
spec:
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:5.7
name: mysql-con
imagePullPolicy: Never
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: mysql-user-root-pwd
- name: MYSQL_USER_NAME
valueFrom:
secretKeyRef:
name: mysql-secret
key: mysql-user-dbuser-name
- name: MYSQL_USER_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: mysql-user-dbuser-pwd
- name: MYSQL_DATABASE
valueFrom:
configMapKeyRef:
name: mysql-config
key: db-name
args: ["--default-authentication-plugin=mysql_native_password"]
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim
索引
本文由博客一文多发平台 OpenWrite 发布!
通过搭建MySQL掌握k8s(Kubernetes)重要概念(下):参数配置的更多相关文章
- 通过搭建MySQL掌握k8s(Kubernetes)重要概念(上):网络与持久卷
上一篇"通过实例快速掌握k8s(Kubernetes)核心概念"讲解了k8s的核心概念,有了核心概念整个骨架就完整了,应付无状态程序已经够了,但还不够丰满.应用程序分成两种,无状态 ...
- K8s - Kubernetes重要概念介绍(Cluster、Master、Node、Pod、Controller、Service、Namespace)
K8s - Kubernetes重要概念介绍(Cluster.Master.Node.Pod.Controller.Service.Namespace) Kubernetes 是目前发展最 ...
- 超详细,多图文使用galera cluster搭建mysql集群并介绍wsrep相关参数
超详细,多图文使用galera cluster搭建mysql集群并介绍wsrep相关参数 介绍galera cluster原理的文章已经有一大堆了,百度几篇看一看就能有相关了解,这里就不赘述了.本文主 ...
- 从零开始入门 K8s | Kubernetes 网络概念及策略控制
作者 | 阿里巴巴高级技术专家 叶磊 一.Kubernetes 基本网络模型 本文来介绍一下 Kubernetes 对网络模型的一些想法.大家知道 Kubernetes 对于网络具体实现方案,没有什 ...
- Kubeadm搭建高可用(k8s)Kubernetes v1.24.0集群
文章转载自:https://i4t.com/5451.html 背景 Kubernetes 1.24新特性 从kubelet中移除dockershim,自1.20版本被弃用之后,dockershim组 ...
- mysql 远程连接不上,bind-address参数配置要求,以及怎么去使得mysql能够允许远程的客户端访问
刚安装了MySQL服务器,使用远程管理工具总是连接不上,因为知道mysql的默认端口是3306,于是使用telnet连接这个端口,(从这里可以学到telnet是可以这样用的) telnet 192.1 ...
- Kubernetes(K8s)基础概念 —— 凿壁偷光
Kubernetes(K8s)基础概念 -- 凿壁偷光 K8s是什么:全称 kubernetes (k12345678s) 作用:用于自动部署,扩展和管理"容器化应用程序"的 ...
- 基于 kubeadm 搭建高可用的kubernetes 1.18.2 (k8s)集群二 搭建高可用集群
1. 部署keepalived - apiserver高可用(任选两个master节点) 1.1 安装keepalived # 在两个主节点上安装keepalived(一主一备) $ yum inst ...
- 01 . 容器编排简介及Kubernetes核心概念
Kubernetes简介 Kubernetes是谷歌严格保密十几年的秘密武器-Borg的一个开源版本,是Docker分布式系统解决方案.2014年由Google公司启动. Kubernetes提供了面 ...
随机推荐
- atcoder C - Snuke and Spells(模拟+思维)
题目链接:http://agc017.contest.atcoder.jp/tasks/agc017_c 题解:就是简单的模拟一下就行.看一下代码就能理解 #include <iostream& ...
- 牛客网暑期ACM多校训练营(第四场) G Maximum Mode 思维
链接:https://www.nowcoder.com/acm/contest/142/G来源:牛客网 The mode of an integer sequence is the value tha ...
- codeforces 805 E. Ice cream coloring(dfs)
题目链接:http://codeforces.com/contest/805/problem/E 题意:你有n个节点,这个n个节点构成一棵树.每个节点拥有有si个类型的ice,同一个节点的ice互相连 ...
- 【Offer】[45]【把数组排成最小的数】
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如,输入数组{3,32,321},则打印出 ...
- 网络编程之TCP/IP各层详解
网络编程之TCP/IP各层详解 我们将应用层,表示层,会话层并作应用层,从TCP/IP五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议,就理解了整个物联网通信的原理. 首先,用户感知到的只 ...
- jsp页面直接输出了html代码
可能出现的情况: 1.修改web.xml中springMVC的过滤器路径如下: "/"与"/*区别" 其实/和/*都可以匹配所有的请求资源,但其匹配的优先顺序是 ...
- Winform中使用代码编写Button按钮的点击事件
场景 一般在进行Winform窗体开发时都会拖拽一个Button,然后双击进入Button按钮的点击事件中,进行 点击事件的编写. 如果窗体上事先没有Button按钮,是在代码中生成的Button按钮 ...
- 实战spring自定义属性(schema)
关于spring自定义属性(schema) 在开发Dubbo应用的时候,我们会在xml中做以下类似的配置: <dubbo:application name="dubbo_service ...
- TestNG(十五)xml文件实现多线程测试
package com.course.testng.thread; import org.testng.annotations.Test; public class ThreadOnXml { @Te ...
- 手把手教你搭建Jenkins实现自动化部署Jar
centeros7 安装配置环境jdk1.8 1.先卸载centeros自带jdk rpm -qa | grep openjdk 查询出来的自带的openjdk 2.删除 rpm -e --nodep ...