k8s搭建一個lnmp本地環境的完整過程

1.安裝k8s

本機使用了Mac下的Docker Desktop下的k8s環境。
k8s鏡像國內下載:Docker Desktop for Mac/Windows 開啓 Kubernetes
php

Dashboard登陸Token過時時間修改

本地測試TOKEN是否是常常過時?在構建文件recommended.yaml的–namespace=kubernetes-dashboard下增長一行ttl便可。
在這裏插入圖片描述
已經啓動了怎麼辦?修改已經啓動yaml文件,大概在143行下新增ttl。

html

kubectl edit deployment -n kubernetes-dashboard

2.基本概念介紹

1.架構核心組件瞭解

k8s使用相似master/node(cluster)的模型,由客戶端發送請求給master的api server,master的api server收到請求後查詢ETCD的變更,ETCD進行Controller Manager和Scheduler內部調度後返回給api server,最後轉發給對應的node去執行。
在這裏插入圖片描述
圖片來源B站UP主:free-coder的【kubernetes入門】快速瞭解和上手容器編排工具k8s



node

客戶端請求方式 描述
kubectl 命令行工具
webUI 經過Dashboard操做發出請求
RestAPI 自定義,能夠給webUI增長功能。
master組件 描述
api server 資源操做的惟一入口,提供認證、受權、訪問控制、API 註冊和發現等機制。
ETCD 保存整個集羣的狀態,Raft分佈式的kv數據庫
Controller Manager 資源控制中心,維護集羣的狀態,好比故障檢測、自動擴展、滾動更新等
Scheduler 調度的主要實施者,按照預約的調度策略將 Pod 調度到相應的機器上
node組件 描述
kubelet 維護容器的生命週期,同時也負責 Volume(CVI)和網絡(CNI)的管理
kube-proxy 爲 Service 提供 cluster 內部的服務發現和負載均衡
container runtime 鏡像管理以及 Pod 和容器的真正運行(CRI ),被調度的實際容器(docker)

更多請參考Kubernetes指南 核心組件mysql

2.資源對象瞭解

類型 資源名 描述
集羣 Namespace 命名空間起隔離做用,初始化有default和kube-system,方便劃分項目組或用戶組
集羣 Node Pod真正運行的主機,必定包含kubelet、kube-proxy、Container runtime
工做資源 POD 調度的基本單位,多個容器共享網絡和文件系統,共享IPC、PID、network和namespace
工做資源 ReplicaSet 新一代RC(Replication Controller),保證集羣中運行指定數目的Pod副本
工做資源 Deployment 部署表示用戶對K8s集羣的一次更新操做,聲明式操做。
工做資源 StatefulSet 有狀態服務集,確保pod與數據保持連續性,適合跑mysql等掛載數據的服務
工做資源 DaemonSet 後臺支撐服務集,有些節點須要有些節點不須要的,存儲、日誌和監控等在每一個節點上支撐K8s集羣運行的服務。
工做資源 Job 任務,全局的工做隊列,控制批處理型任務的API對象。
服務發現及均衡資源 Service 將多個pod抽象爲一個ServiceIP(iptables),經過 labels 爲應用提供負載均衡和服務發現,解決Pod 的 IP 地址會隨着 Pod 的重啓而變化的問題
服務發現及均衡資源 Ingress 路由,進入集羣的請求提供路由規則的集合,給 service 提供集羣外部訪問的 URL、負載均衡、SSL 終止、HTTP 路由等
配置與存儲 Volume 讓k8s具有存儲資源抽象能力,其中持久存儲卷(Persistent Volume,PV)由資源提供者配置,持久存儲卷聲明(Persistent Volume Claim,PVC)由資源使用者根據業務申請
配置與存儲 ConfigMap 用於保存配置數據的鍵值對,相比secret能夠保存非敏感信息
配置與存儲 Secret 解決了密碼、token、密鑰等敏感數據的配置問題,不須要暴露到鏡像或pod裏。

更多請參考Kubernetes指南 資源nginx

3.lnmp構建文件介紹

github源碼地址git

.
├── kustomization.yaml		#整合多套生產、開發的yaml文件方便管理。
├── local-storage.yaml		#經過hostPath建立PV和PVC
├── local_storage			
│   ├── mysql				#數據持久化目錄
│   └── wordpress			#應用代碼持久化目錄
├── mysql-deployment.yaml	#mysql的svc和Deployment管理的pod
├── nginx-deployment.yaml	#與上相似,多了ConfigMap管理配置和LoadBalancer直接暴露IP。
├── php-deployment.yaml		#與上相似
└── php-fpm					
    └── Dockerfile			#裝了mysql擴展的php鏡像

本地環境設置分兩部分:github

  1. 鏡像拉去imagePullPolicy: Never ,鏡像優先從本地倉庫查找。
  2. PV設置hostPath的絕對路徑。
  3. 同一個下PVC使用不一樣的目錄subPath。

生成帶mysql擴展的php鏡像,提供給k8s使用。web

docker build -t k8s-php7-fpm php-fpm/.

運行kustomization.yaml文件便可。redis

kubectl apply -k .

在這裏插入圖片描述

4.kubectl經常使用命令

相似對pod命令,也對deployment、Service、PVC等資源適用,能夠觸類旁通。sql

kubectl cluster-info              	#查詢集羣運行信息、版本。

kubectl apply -f test.yaml			#部署指定文件,--file
kubectl delete -f test.yaml			#取消部署

kubectl run d1 --image httpd:alpine --port 80      #建立d1的Apache鏡像
kubectl exec -it redis-master-59694fd4d5-txcbc sh  #以sh進入容器
kubectl logs -f redis-master-59694fd4d5-txcbc 	   #查看運行時容器內的log

kubectl get - 相似於 docker ps,查詢資源列表
kubectl describe - 相似於 docker inspect,獲取資源的詳細信息
kubectl logs - 相似於 docker logs,獲取容器的日誌
kubectl exec - 相似於 docker exec,在容器內執行一個命令

kubectl get pod --output=wide     #更多的pod信息
kubectl get pods  -A		      #--all-namespaces全部命名空間下的pod
kubectl describe pods			  #更詳細的pods信息
kubectl get pods -w -l			  #watch命令,掛起觀察
kubectl get events -A --sort-by='.metadata.creationTimestamp' #查詢運行時事件倒序
kubectl expose deployment d1 --target-port 80 --type NodePort    #將d1暴露爲一個svc,指定80端口和NodePort類型。


kubectl scale --replicas=3 deployment/nginx-app	#自動擴容到3個,自動加入退出service。
kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2	#滾動升級,默認,無中斷服務升級
kubectl rolling-update frontend-v1 frontend-v2 --rollback #回滾
kubectl rollout status deployment/nginx-app		#查看滾動狀態


for i in 0 5; do kubectl exec "web-$i" -- sh -c 'hostname'; done    #循環打印web-05容器的的hostname
for i in 0 5; do kubectl exec "web-$i" -- sh -c 'echo "$(hostname)" > /usr/share/nginx/html/index.html'; done #寫入nginx hostname

5.遇到的坑

Docker Desktop for Mac : Kubernetes is starting

重寫構建驗證包,重啓k8s,耐心等待幾分鐘。

rm -rf ~/Library/Group\ Containers/group.com.docker/pki/
相關文章
相關標籤/搜索