使用Kubernetes(minikube)部署Nginx,并展示Hello World
总结
本书介绍了如何在Ubuntu上使用minikube部署Nginx。然后,我们将配置ConfigMap,以便在部署了”Hello World” HTML文件的Nginx上进行显示。
前提条件 tí
请在Ubuntu上安装minikube。有关minikube的安装方法,请参考作者撰写的下面文章:《在Ubuntu 20.04.1 LTS上安装minikube》。
创建Nginx的YAML文件
使用vi nginx.yaml命令打开Vi编辑器,创建以下YAML文件来生成Nginx的YAML文件。
apiVersion: v1 # 使用するKubernetes APIバージョンを定義
kind: Service # PodのネットワークであるServiceリソースを定義
metadata: # 名前やラベルを指定
labels:
app: nginx-app
name: nginx
name: nginx-service
spec: # spec内にリソースの仕様を記述する
selector: # 同一のラベルを定義しているリソースを参照
app: nginx-app
name: nginx
type: NodePort # Kubenetes外からアクセスできるようにNodePortを指定(ホストOSからNginxの画面が確認できるようにする)
ports:
- name: nginx-port #ポート番号を指定
port: 80
protocol: TCP
targetPort: nginx-port
---
apiVersion: apps/v1
kind: Deployment # Podの自己修復機能を持つDeploymentリソースを定義
metadata:
labels:
app: nginx-app
name: nginx
name: nginx
spec:
replicas: 1 # 作成するPod数を定義
selector:
matchLabels:
app: nginx-app
name: nginx
template:
metadata:
labels:
app: nginx-app
name: nginx
spec:
containers:
- name: nginx
image: nginx:latest # NginxのDockerHubに記載されているDockerImageの名称とバージョンを指定
ports:
- containerPort: 80 # Podから解放するポート番号を定義
name: nginx-port
protocol: TCP
2.部署 Nginx
-
- 执行以下命令,部署创建的YAML文件。
$ kubectl apply -f nginx.yaml
执行以下命令,确认已创建Nginx的Pod和Service。
$ kubectl get pod | grep nginx
nginx-669bffdf57-hnmph 1/1 Running 1 25m
$ kubectl get service | grep nginx
nginx-service NodePort 10.108.1.208 80:30348/TCP 25m
执行以下命令,获取能够在主机操作系统(Ubuntu)上显示Nginx页面的IP地址。
$ minikube service nginx-service
|———–|—————|—————|—————————|
| NAMESPACE | NAME | TARGET PORT | URL |
|———–|—————|—————|—————————|
| default | nginx-service | nginx-port/80 | http://192.168.49.2:30348 |
|———–|—————|—————|—————————|
* 在默认浏览器中打开服务 default/nginx-service…
通过浏览器访问上述分配的IP地址,确认Nginx默认页面能够显示。
将index.html保存到Configmap资源中。
ConfigMap是将配置文件存储在资源内并在将存储的配置文件挂载到Pod上时使用的工具。
这是Kubernetes官方ConfigMap的概述。
在nginx-configmap.yaml中打开Vi编辑器,创建ConfigMap的YAML文件。
apiVersion: v1
kind: ConfigMap # Podに設定ファイルを渡すことができるリソース
metadata:
labels:
app: nginx-app
name: nginx
name: nginx-html
data: # 下記にPodに渡したい設定ファイルを定義
index.html: | # ファイル名を定義
<html> # 設定ファイルの中身を記載
<head>
<title>
Kubernetes Hello World
</title>
<body>
<h1>
Kubernetes Hello World
</h1>
<h2>
Kubernetes Nignx ConfigMap
</h2>
</body>
</html>
在创建YAML文件后,执行 “kubectl apply -f nginx-configmap.yaml” 命令来创建 ConfigMap 资源。要确认 ConfigMap 资源是否已创建,请执行 “kubectl get configmap” 命令。
$ kubectl get configmap | grep nginx
nginx-html 1 9m26s
使得在Nginx的Pod上可见index.html文件。
为了将先前创建的ConfigMap资源挂载到Pod上,需要修改第一章中创建的nginx.yaml文件。
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx-app
name: nginx
name: nginx-service
spec:
selector:
app: nginx-app
name: nginx
type: NodePort
ports:
- name: nginx-port
port: 80
protocol: TCP
targetPort: nginx-port
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-app
name: nginx
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx-app
name: nginx
template:
metadata:
labels:
app: nginx-app
name: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
name: nginx-port
protocol: TCP
volumeMounts: # Pod上にマウントするファイルを定義
- name: nginx-html-file # マウントしたいvolumeを指定
mountPath: /usr/share/nginx/html/index.html # 配置するパスを指定(Nginxのデフォルトの公開ディレクトリは/usr/share/nginx/html)
subPath: index.html # マウントするファイル名を指定
readOnly: true
volumes: # マウントしたいリソースを定義
- name: nginx-html-file # Podにマウントするvolumeを定義
configMap:
name: nginx-html # 使用するConfigMapリソースを指定
items: # ConfigMapリソースで定義した、どのファイルを使用するか指定する
- key: "index.html"
path: "index.html"
在修改 YAML 文件后,执行 kubectl apply -f nginx.yaml 命令来应用修改内容。然后,通过浏览器确认 index.html 的内容是否被正确显示。
最后
通过使用ConfigMap,我们能够在Nginx中显示index.html。我们可以将Kubernetes(minikube)中的ConfigMap与Nginx组合使用,以便在学习HTML或进行操作确认等方面使用。