1. ConfigMap 構成センターの理論的知識
1. ConfigMap 構成センターの概要
ConfigMap は、プレーンテキスト (非機密) データをキーと値のペアで保存するために使用される API オブジェクトです。環境変数、コマンド ライン パラメーター、またはストレージ ボリュームを使用して Pod に適用できます。ConfigMap は、次の構成ファイルと同等です。ポッド内のプログラム。ConfigMap コンテンツの変更を通じて、プログラムの構成を変更します。
2. ConfigMap の制限事項
ConfigMap は大量のデータを保存するように設計されていないため、ConfigMap に保存されるデータは 1MiB を超えることはできません。
2. ConfigMap を作成する 4 つの方法
1. 最初の方法: コマンド ラインを使用して ConfigMap を作成します。
mysql.conf
という名前の構成マップを作成します
kubectl create configmap mysql.conf --from-literal=datadir=/var/lib/mysql --from-literal=socket=/var/lib/mysql/mysql.sock
構成マップの詳細を表示します。
kubectl describe cm mysql.conf
2. 2 番目の方法: ファイルを指定して ConfigMap を作成する
まず、nginx.conf ファイルを作成し、nginx.conf ファイルの構成マップを作成します。
vim nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
}
nginx.conf
という名前の構成マップを作成し、--from-file
パラメータを使用してファイルの場所を指定します
kubectl create configmap nginx.conf --from-file=www=./nginx.conf
詳細の表示: key=www、value=./nginx.conf でコンテンツを定義します。
kubectl describe cm nginx.conf
3. 3 番目の方法: ディレクトリを指定して ConfigMap を作成する
まず config ディレクトリを作成し、そのディレクトリ内に nginx および mysql 構成ファイルを作成し、--from-file
パラメータを使用して config ディレクトリを指定します。
mkdir config && cd config
vim nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
}
vim my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
!includedir /etc/my.cnf.d
config
configmapを作成するディレクトリを指定してください
kubectl create cm config --from-file=./config
詳細を表示: キーの名前はディレクトリ内のファイル名に基づいて付けられます。
kubectl describe cm config
4. 4 番目の方法: YAML リソース リストを使用して ConfigMap を作成します。
db-config
configmap、定義master.cnf
、slave.cnf
キーの作成
cat db-config.yaml
---
apiVersion: v1
kind: ConfigMap
metadata:
name: db-config
labels:
app: db
data:
master.cnf: |
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
server-id=1
slave.cnf: |
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
server-id=2
YAML ファイルを実行します。
kubectl apply -f db-config.yaml
構成マップの詳細を表示しますdb-config
。
kubectl describe cm db-config
3. ConfigMap の 3 つの使用方法
上記はキー/値メソッドで設定ファイルの情報を定義する方法でしたが、設定ファイルを参照する方法を学びましょう。
1. 最初の方法: 環境変数を使用して -configMapKeyRef メソッドを導入します
nginx-config
次の名前の構成マップを作成します。
cat nginx-config.yaml
---
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-config
labels:
app: nginx
env: uat
data:
nginx.conf: |
user nginx;
worker_processes auto;
error_log /var/log/nginx/nginx-error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
}
デプロイメントリソースを作成し、コンテナ内のnginx-config
構成マップのnginx.conf
キーを参照します。
cat web-nginx.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-nginx
labels:
app: nginx
env: uat
spec:
replicas: 1
selector: # 关联标签
matchLabels:
app: nginx
env: uat
strategy:
rollingUpdate: # 更新策略
maxSurge: 2
maxUnavailable: 0
template:
metadata:
labels:
app: nginx
env: uat
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
env:
- name: nginxConfig # 定义环境变量名称
valueFrom:
configMapKeyRef:
name: nginx-config # 指定configmap名称
key: nginx.conf # 指定configmap中Key
YAML ファイルを実行します。
kubectl apply -f nginx-config.yaml
kubectl apply -f web-nginx.yaml
作成されたリソース情報を表示します。
kubectl get pods -l app=nginx
kubectl get configmap nginx-config
作成した Pod にコンテナーを入力して、変数情報を表示します。
kubectl exec -it web-nginx-84989c5546-6clp4 -- /bin/bash
printenv
Pod リソースを作成するときにコマンドを使用して、変数を参照して操作を開始できます。たとえば、MongoDB の操作を開始するには、次のようにします。
command: ["/bin/mongod", "--bind_ip=$(变量名)"]
2. 2 番目の方法: 環境変数を使用して -envfrom メソッドを導入する
mysql-config
2 つの KEY が定義された configmapを作成します。
cat mysql-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-config
data:
master.cnf: |
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
server-id=1
slave.cnf: |
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
server-id=2
デプロイメントを作成し、 envfrom メソッドを通じて configmap を指定します。このメソッドは、configmap 内のすべての KEY をシステム変数として参照します。envFromメソッドの特性を示すためだけであるため、ここではイメージのデモを使用します busybox
。YAMLリソースリストは次のとおりです。
cat envfrom_demo.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: envfrom-demo
namespace: default
spec:
replicas: 1
selector:
matchLabels:
name: envfrom-demo
template:
metadata:
labels:
name: envfrom-demo
spec:
containers:
- name: envfrom-demo
image: busybox:1.28.0
imagePullPolicy: IfNotPresent
command: ["/bin/sh", "-c", "sleep 360000"]
envFrom:
- configMapRef:
name: mysql-config # 指定configmap名称
YAML ファイルを実行します。
kubectl apply -f mysql-config.yaml
kubectl apply -f envfrom_demo.yaml
作成されたリソース情報を表示します。
kubectl get pods -l name=envfrom-demo
kubectl get configmap mysql-config
コンテナーを入力して変数情報を表示します。
kubectl exec -it envfrom-demo-6cf79bf4bc-4xvcc -- /bin/sh
printenv
3. 3 番目の方法: ボリューム volume を使用してマウントします。
最初の 2 つは、環境変数を使用して構成を参照するために使用され、頻繁には使用されません。最も一般的に使用される方法は、ボリューム マウント方法を使用することです。
web
次の名前の構成マップを作成します。
cat web-config.yaml
---
apiVersion: v1
kind: ConfigMap
metadata:
name: web
data:
nginx_8080.conf: |
server {
listen 8080;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
nginx ミラーを使用し、デプロイメントを作成し、マウント構成マップを使用します。
cat web.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-nginx
spec:
replicas: 1
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
volumes:
- name: web-config
configMap: # 定义卷,使用名为web的configmap
name: web
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
volumeMounts:
- name: web-config # 挂载卷
mountPath: /etc/nginx/conf.d
YAML リソース マニフェストを実行します。
kubectl apply -f web-config.yaml
kubectl apply -f web.yaml
構成ファイルのポートを 8080 に変更し、検証として Nginx のポート 8080 をリクエストします。
kubectl get pods -o wide
curl 10.244.235.251:8080
OK、上記はポート 8080 経由で nginx に正常にアクセスできます。このボリュームのマウント方法はディレクトリ用であることに注意してください。たとえば、以下に /etc/nginx をマウントすると、コンテナの /etc/nginx ディレクトリは以前のデータになります。マウントされたデータに置き換えられます。
4. 知識を広げる
1. ConfigMap を編集する
kubectl edit cm web
編集して保存した後、ボリューム マウント方式の場合、ホット ロード (約 10 秒) が有効になり、コンテナ構成に更新されますが、可変方式はサポートされていないため、削除して再度作成する必要があります。変更されたデータが有効になります。
2.ConfigMapを削除する
kubectl delete cm web
3. 変数を導入するための configMapKeyRef と envfrom の違いは何ですか?
- configMapKeyRef は、ConfigMap 内のデータを環境変数としてコンテナーに挿入する方法です。これにより、Pod 定義の ConfigMap で特定のキーと値のペアを参照し、それらを環境変数としてコンテナに渡すことができます。このメソッドは、ConfigMap 内の構成データをコンテナー内のアプリケーションに直接公開するのに適しています。
- envFrom は、ConfigMap 全体のデータを環境変数としてコンテナーに注入する方法です。これにより、Pod 定義で 1 つ以上の ConfigMap を参照し、それらのすべてのキーと値のペアを環境変数としてコンテナーに渡すことができます。この方法は、複数の関連する構成データをコンテナーに一度に注入するのに適しています。