下篇1:将 ConfigMap 中的键值对作为容器的环境变量
写在开篇
继续接上篇,《一文了解K8S的ConfigMap》。上篇聊过,官方文档中提到的可以使用下面4种方式来使用 ConfigMap 配置 Pod 中的容器:
- 容器的环境变量:可以将 ConfigMap 中的键值对作为容器的环境变量。
- 在只读卷里面添加一个文件,让应用来读取:可以将 ConfigMap 中的内容作为一个只读卷挂载到 Pod 中的容器内部,然后在容器内读取挂载的文件。
- 编写代码在 Pod 中运行,使用 Kubernetes API 来读取 ConfigMap:可以在 Pod 中运行自定义代码,使用 Kubernetes API 来读取 ConfigMap 中的内容。
- 在容器命令和参数内:可以在容器的启动命令中通过引用环境变量的方式来使用 ConfigMap。
为了控制篇幅,计划分4篇进行分享,本篇分享以使用“容器的环境变量”的方式进行实战。 关于使用ConfigMap的更多详情,可参考官方文档:https://kubernetes.io/zh-cn/docs/concepts/configuration/configmap/#using-configmaps
开发示例应用
- goweb项目目录结构
[root@workhost goweb]# tree
.
├── Dockerfile
├── go.mod
├── main.go
├── README.md
└── static
└── login.html
- main.go
package main
import (
"fmt"
"log"
"net/http"
"os"
"text/template"
)
type Message struct {
Msg string
}
func home(w http.ResponseWriter, r *http.Request) {
if r.Method == "GET" {
w.Header().Set("Location", "/login")
w.WriteHeader(http.StatusFound)
}
}
func login(w http.ResponseWriter, r *http.Request) {
t, _ := template.ParseFiles("./static/login.html")
if r.Method == "GET" {
t.Execute(w, nil)
}
}
func main() {
http.HandleFunc("/", home)
http.HandleFunc("/login", login)
args := os.Args
if args[1] == "-p" {
port := args[2]
listenAddr := fmt.Sprintf(":%v", port)
log.Println("ListenAndserve", listenAddr)
err := http.ListenAndServe(listenAddr, nil)
if err != nil {
log.Println(err)
}
}
}
本次代码在上次的基础上做了点小改造:接受命令行参数,使用 os.Args 获取程序运行时的参数。如果传入的参数中包含 -p,则说明需要指定监听的端口,将端口值读取出来并使用 http.ListenAndServe 启动 HTTP 服务。
- login.html

浙公网安备 33010602011771号