您的位置:首頁(yè) >熱點(diǎn) > 正文

微服務(wù) - 搭建k8s(minikube)與簡(jiǎn)單wordPress實(shí)戰

Kubernetes 的基本架構

Kubernetes 的基本架構,由Matser和Node子節點(diǎn)組成,使用kubectl進(jìn)行通信, Master 里的組件有哪些:

Master 里有 4 個(gè)組件,分別是 apiserver、etcd、scheduler、controller-manager。


【資料圖】

Kubernetes 的基本架構圖

Kubernetes 的基本架構,由Matser和Node子節點(diǎn)組成,使用kubectl進(jìn)行通信, Master 里的組件有哪些:

Master 里有 4 個(gè)組件,分別是 apiserver、etcd、scheduler、controller-manager。

Api Server 系統唯一入口聯(lián)絡(luò )員,controller-manager監控運維節點(diǎn)容器狀態(tài),kube scheduler負責容器的編排,etcd負責持久化存儲和服務(wù)發(fā)現。

這 4 個(gè)組件也都被容器化了,運行在集群的 Pod 里,我們可以用 kubectl 來(lái)查看它們的狀態(tài),使用命令:

kubectl get pod -n kube-system

安裝

我使用的電腦是Mac pro M2芯的,使用的虛擬環(huán)境是 Ubuntu 22.04 ,M2芯兼容性不是特別好,所以盡量跟我博客中的版本保持一致。

虛擬機環(huán)境 Ubuntu 22.04docker :20.10.17minikube:v1.25.2

虛擬機初始化

安裝虛擬機需要的工具,ip addr 查看ip,可以使用終端登錄虛擬機。

sudo apt updatesudo apt install -y git vim curl jq openssh-server

下載時(shí)請注意版本,以宿主機的版本為準,下載對應的版本,不然會(huì )報bash: /usr/local/bin/kubectl:無(wú)法執行二進(jìn)制文件: 可執行文件格式錯誤的錯誤提示。

curl -Lo minikube https://github.com/kubernetes/minikube/releases/download/v1.25.2/minikube-linux-arm64sudo install minikube /usr/local/bin/

使用minikube version查看版本:

minikube version: v1.25.2commit: 362d5fdc0a3dbee389b3d3f1034e8023e72bd3a7

使用minikube kubectl命令來(lái)安裝kubectl:

在這之前需要安裝docker,使用命令sudo snap install docker,把當前用戶(hù)加入到docker組,命令如下:

sudo docker version --format {{.Server.Os}}-{{.Server.Version}}sudo groupadd dockersudo usermod -aG docker $USER && newgrp docker

啟動(dòng):

minikube start --image-mirror-country="cn"--image-repository="registry.cn-hangzhou.aliyuncs.com/google_containers"

啟動(dòng)完成后可以使用這兩個(gè)命令查看集群狀態(tài):

minikube statusminikube node list

查看kubectl版本,minikube kubectl -- version

使用 Linux 的“alias”功能,為它創(chuàng )建一個(gè)別名,寫(xiě)到當前用戶(hù)目錄下的 .bashrc 里,也就是這樣:

alias kubectl="minikube kubectl --"

虛擬機安裝完成后,重啟一下虛擬機,不然會(huì )報Exiting due to DRV_NOT_HEALTHY:意思是沒(méi)找到容器的驅動(dòng)器,有時(shí)間這個(gè)問(wèn)題的原因是docker沒(méi)有啟動(dòng)。

執行kubectl run ngx --image=nginx:alpine,這里涉及 Kubernetes 里的一個(gè)非常重要的概念:Pod。

命令執行之后kubectl get pod可以看到,在 Kubernetes 集群里就有了一個(gè)名字叫 ngx 的 Pod 正在運行,表示我們的這個(gè)單節點(diǎn) minikube 環(huán)境已經(jīng)搭建成功。

插件

查看插件的命令minikube addons list

比較重要的有兩個(gè):DNS 和 Dashboard。

在 minikube 環(huán)境里執行一條簡(jiǎn)單的命令,就可以自動(dòng)用瀏覽器打開(kāi) Dashboard 頁(yè)面,而且還支持中文 minikube dashboard

如果想設置外網(wǎng)可以訪(fǎng)問(wèn),執行命令kubectl proxy --port=8001 --address="192.168.88.131" --accept-hosts="^.*" &

kubectl 常用命令

編寫(xiě)yaml文檔有兩個(gè)小技巧,一個(gè)是參考Kubernetes 的官方參考文檔,https://kubernetes.io/docs/reference/kubernetes-api/。

第二個(gè)是使用kubectl命令:

kubectl explain podkubectl explain pod.metadatakubectl explain pod.speckubectl explain pod.spec.containers

使用kubectl例如寫(xiě)入一個(gè)模版,輸出到一個(gè)指定文件中:

kubectl run ngx --image=nginx:alpine --dry-run=client -o yaml > nginx_pod.yaml

pod的關(guān)鍵在于yaml文件的編寫(xiě),然后用kubectl去執行:

# 添加podkubectl apply -f nginx_pod.yaml# 刪除podkubectl delete pod [podname]# 查看pod節點(diǎn)kubectl get pod -o wide# 查看日志kubectl logs [podname]# 查看pod詳細情況kubectl describe pod [podname]# 登陸pod kubectl exec -it ngx-pod -- bash

K8s nginx + WordPress + MariaDb 實(shí)戰

先從搭建一個(gè)簡(jiǎn)單的WordPress網(wǎng)站開(kāi)始,在這之前你先了解一下yaml語(yǔ)言,因為k8s需要的通信都是建立在yaml語(yǔ)言之上,和web中的html一樣,是所有運行的基礎。

nginx + WordPress + MariaDb流程圖

先看看下圖,這是我們要完成的事情,也是k8s的原理所在,宿主機上搭建Nginx 做反向代理,相當于做了一次網(wǎng)關(guān),K8s映射的端口,已達成通信的目的。

1:部署MariaDB,準備yml文件 maria.yml

apiVersion: v1kind: ConfigMapmetadata:  name: maria-cmdata:  DATABASE: "db"  USER: "wp"  PASSWORD: "123"  ROOT_PASSWORD: "123"---apiVersion: v1kind: Podmetadata:  name: maria-pod  labels:    app: wordpress    role: databasespec:  containers:  - image: mariadb:10    name: maria    imagePullPolicy: IfNotPresent    ports:    - containerPort: 3306    envFrom:    - prefix: "MARIADB_"      configMapRef:        name: maria-cm

執行命令kubectl apply -y maria.yml

2.部署WordPress的Pod

執行kubectl get pod -o wide命令,查看maria-pod的IP地址和運行狀態(tài),我本地的是172.17.0.6,狀態(tài)是Running,表示ok。

node3@node3-virtual-machine:~/yaml$ kubectl get pod -o wideNAME        READY   STATUS    RESTARTS   AGE   IP           NODE       NOMINATED NODE   READINESS GATESmaria-pod   1/1     Running   0          96m   172.17.0.6   minikube              

準備yml文件 wordpress-pod.yml

apiVersion: v1kind: ConfigMapmetadata:  name: wp-cmdata:  HOST: "172.17.0.6"  USER: "wp"  PASSWORD: "123"  NAME: "db"---apiVersion: v1kind: Podmetadata:  name: wp-pod  labels:    app: wordpress    role: websitespec:  containers:  - image: wordpress:5    name: wp-pod    imagePullPolicy: IfNotPresent    ports:    - containerPort: 80    envFrom:    - prefix: "WORDPRESS_DB_"      configMapRef:        name: wp-cm

執行部署命令,kubectl apply -f wordpress-pod.yml

3.WordPress Pod 映射端口號,讓它在集群外可見(jiàn)

因為 Pod 都是運行在 Kubernetes 內部的私有網(wǎng)段里的,外界無(wú)法直接訪(fǎng)問(wèn),想要對外暴露服務(wù),需要使用一個(gè)專(zhuān)門(mén)的 kubectl port-forward 命令,它專(zhuān)門(mén)負責把本機的端口映射到在目標對象的端口號,經(jīng)常用于 Kubernetes 的臨時(shí)調試和測試。

kubectl port-forward wp-pod 8080:80 &

如果想關(guān)閉端口轉發(fā),需要敲命令 fg ,它會(huì )把后臺的任務(wù)帶回到前臺,然后就可以簡(jiǎn)單地用“Ctrl + C”來(lái)停止轉發(fā)了。

Dashboard

4.創(chuàng )建反向代理的 Nginx

nginx的配置文件,準備proxy.conf,我本地的路徑/home/node3/conf/proxy.conf

server {  listen 80;  default_type text/html;  location / {      proxy_http_version 1.1;      proxy_set_header Host $host;      proxy_pass http://127.0.0.1:8080;  }}

執行docker命令,我本機虛擬機的ip是192.168.88.131 :

docker run -d --rm \    --net=host \    -v /home/node3/conf/proxy.conf:/etc/nginx/conf.d/default.conf \    nginx:alpine
安裝完成

免責聲明:本文不構成任何商業(yè)建議,投資有風(fēng)險,選擇需謹慎!本站發(fā)布的圖文一切為分享交流,傳播正能量,此文不保證數據的準確性,內容僅供參考

關(guān)鍵詞:

相關(guān)內容

熱門(mén)資訊

最新圖文

国产福利萌白酱精品一区|国产成人久久精品流白浆|国产一级A级免费视频|久久综合亚洲鲁鲁五月天欧|欧美黑人巨大视频HD