Kubernetes中自定义命令、环境变量及MySQL数据库的使用
立即解锁
发布时间: 2025-08-12 00:01:31 阅读量: 1 订阅数: 3 

### Kubernetes中自定义命令、环境变量及MySQL数据库的使用
#### 1. 使用自定义命令和环境变量
在Kubernetes中运行Docker镜像时,可使用`–e`将环境变量添加到`docker run`命令中。若使用shell运行Docker镜像命令,还可在“command”和“args”映射中使用环境变量替换。当出现以下情况时会调用shell:
- 使用`ENTRYPOINT`或`CMD`的shell形式。
- 在`ENTRYPOINT`或`CMD`指令中显式调用shell。
下面以“ubuntu” Docker镜像为例,展示如何覆盖默认的`ENTRYPOINT`命令和`CMD`参数。
##### 1.1 使用Docker镜像的默认`ENTRYPOINT`和`CMD`
“Ubuntu”镜像的`Dockerfile`未提供`ENTRYPOINT`指令,但`CMD`指令设置为`CMD ["/bin/bash"]`。创建一个不覆盖`ENTRYPOINT`或`CMD`指令的Pod定义文件`env.yaml`:
```yaml
apiVersion: v1
kind: Pod
metadata:
name: "hello-world"
labels:
app: "helloApp"
spec:
restartPolicy: Never
containers:
-
image: "ubuntu"
name: "hello"
ports:
- containerPort: 8020
env:
-
name: "MESSAGE1"
value: "hello"
-
name: "MESSAGE2"
value: "kubernetes"
```
创建并保存该文件后,使用以下命令创建Pod:
```bash
kubectl create –f env.yaml
```
使用以下命令列出Pod:
```bash
kubectl get pods
```
最初,创建的Docker容器状态显示为“creating”,容器创建完成后,`STATUS`列的值变为“Running”,`READY`列的值变为1/1,表示Pod中的1个容器已准备好,但该状态很快会变为0/1。命令执行完毕后,Pod终止,`STATUS`变为`ExitCode:0`。使用以下命令列出Pod的输出:
```bash
kubectl logs hello-world
```
由于“Ubuntu” Docker镜像中的默认`CMD ["/bin/bash"]`只是调用bash shell,因此不会生成输出。
##### 1.2 覆盖`ENTRYPOINT`和`CMD`
在第二个示例中,使用Pod定义文件中的`Command`和`Args`映射覆盖`Dockerfile`中的`ENTRYPOINT`和`CMD`。结合使用`ENTRYPOINT`和`CMD`可指定镜像的默认可执行文件及默认参数。使用`$(VARIABLE_NAME)`语法进行环境变量替换。
```yaml
apiVersion: v1
kind: Pod
metadata:
name: "hello-world"
labels:
app: "helloApp"
spec:
restartPolicy: Never
containers:
-
image: "ubuntu"
name: "hello"
ports:
-
containerPort: 8020
env:
-
name: "MESSAGE1"
value: "hello"
-
name: "MESSAGE2"
value: "kubernetes"
command: ["/bin/echo"]
args: [" $(MESSAGE1)", " $(MESSAGE2)"]
```
在创建新Pod之前,需删除第一个示例中创建的`hello-world` Pod:
```bash
kubectl delete pod hello-world
```
然后使用以下命令创建新Pod:
```bash
kubectl create –f env.yaml
```
使用`kubectl get pods`列出Pod,Pod状态会迅速从“Running”变为`ExitCode:0`。使用`kubectl logs hello-world`列出Pod的输出,会显示使用环境变量替换生成的消息。
##### 1.3 在`Command`映射中指定可执行文件和参数
在第三个示例中,在Pod定义文件的`Command`映射中同时指定可执行文件和参数。使用`$(VARIABLE_NAME)`语法进行环境变量替换,无需显式调用shell。
```yaml
apiVersion: v1
kind: Pod
metadata:
name: "hello-world"
labels:
app: "helloApp"
spec:
restartPolicy: Never
containers:
-
image: "ubuntu"
name: "hello"
ports:
-
containerPort: 8020
env:
-
name: "MESSAGE1"
value: "hello"
-
name: "MESSAGE2"
```
0
0
复制全文
相关推荐










