文章目錄
- Linux云計算虛擬化-使用Rancher搭建k8s集群并使用lnmp架構發布電商網站
- 1. Rancher介紹
- 2. 使用Rancher搭建k8s集群
- 2.1 實驗環境介紹
- 2.2 在rancher主機上部署rancher平臺
- 2.2.1 匯入docker鏡像(在線pull很慢)
- 2.2.2 安裝rancher2.3.3
- 3. 添加集群并為集群添加節點
- 3.1 創建集群及添加master節點
- 3.2 添加node到k8s集群
- 4. 使用rancher自帶監控查看k8s集群運行狀態
- 5. 分布式LNMP架構部署電商網站
- 5.1 CoreDNS集群內部服務發現
- 5.2 在rancher節點安裝并測驗kubectl
- 5.3 在rancher節點上使用kubectl命令為node節點部署php服務
- 5.4 部署nginx服務
- 5.5 部署mysql
- 5.6 ingress實時監聽apiserver
- 5.7 安裝ecshop
- 6. 總結
Linux云計算虛擬化-使用Rancher搭建k8s集群并使用lnmp架構發布電商網站
1. Rancher介紹
Rancher是一個開源容器管理平臺,可以幫助企業在生產環境中輕松快捷的部署和管理容器,Rancher可以輕松管理各個環境的kubernetes,滿足IT需求并為devops團隊提供支持,
k8s已經成為容器編排標準,也成為了各類云與虛擬化廠商提供的標準基礎架構,Rancher用戶可以選擇使用Rancher Kubernetes Engine(RKE)創建集群,也可以使用GKE`AKS\EKS`等云k8s服務,Rancher用戶還可以匯入和管理現有的k8s集群,
- GKE:Google Kubernetes Engine, Google 的 k8s 托管服務
- AKS:Azure Kubernetes 服務 (AKS) ,微軟的 k8s 托管服務
- EKS:Amazon Elastic Container Service for Kubernetes ,Amazon 的 K8S 托管服務
Rancher為 DevOps 工程師提供了一個直觀的用戶界面來管理他們的服務容器,用戶不需要深入了解 Kubernetes 概念就可以開始使用 Rancher, Rancher 包含應用商店,支持一鍵式部署 Compose模板,
docker-compose 是 Docker 容器進行編排的工具,定義和運行多容器的應用,可以一條命令啟動多個容器,使用 docker-compose不再需要使用 shell 腳本來啟動容器,
docker-compose 默認的模板檔案是 docker-compose.yml,其中定義的每個服務都必須通過image 指令指定鏡像或 build 指令(需要 Dockerfile)來自動構建,
Rancher組成部分:
①基礎設施編排
- Rancher可以使用任何公有云或者私有云的Linux主機資源,
- Linux主機可以是虛擬機,也可以是物理機,
- Rancher僅需要主機有CPU,記憶體,本地磁盤和網路資源,
- 從Rancher的角度來說,一臺云廠商提供的云主機和一臺自己的物理機是一樣的,
- Rancher為運行容器化的應用實作了一層靈活的基礎設施服務,Rancher的基礎設施服務包括網路, 存盤, 負載均衡, DNS和安全模塊,
- Rancher的基礎設施服務也是通過容器部署的,所以同樣Rancher的基礎設施服務可以運行在任何Linux主機上,
②容器編排與調度
- Rancher包含了當前全部主流的編排調度引擎,例如Docker Swarm,Kubernetes,和Mesos,
- Rancher還支持自己的Cattle容器編排調度引擎,
- Cattle被廣泛用于編排Rancher自己的基礎設施服務以及用于Swarm集群,Kubernetes集群和Mesos集群的配置,管理與升級,
③應用商店
- Rancher的用戶可以在應用商店里一鍵部署由多個容器組成的應用,
- 用戶可以管理這個部署的應用,并且可以在這個應用有新的可用版本時進行自動化的升級,
- Rancher提供了一個由Rancher社區維護的應用商店,其中包括了一系列的流行應用,
- Rancher的用戶也可以創建自己的私有應用商店,
④企業級權限管理
- Rancher支持靈活的插件式的用戶認證,支持Active Directory,LDAP, Github等 認證方式,
- Rancher支持在環境級別的基于角色的訪問控制 (RBAC),可以通過角色來配置某個用戶或者用戶組對開發環境或者生產環境的訪問權限,
Rancher的主要組件和功能:

rancher官網:https://rancher.com/ https://www.rancher.cn/
中文官方檔案:https://docs.rancher.cn/rancher2/
2. 使用Rancher搭建k8s集群
2.1 實驗環境介紹
實驗拓撲圖:

各主機介紹:
| 主機名 | IP地址 | 系統版本 | 作用 |
|---|---|---|---|
| rancher | 192.168.43.175 | centos7.6 | rancher服務器 |
| master | 192.168.43.245 | centos7.6 | k8s-master,計算服務器,Etcd , Control,Worker節點 |
| node | 192.168.80.147 | centos7.6 | k8s-node,計算服務器 |
介紹一個小技巧:當某條指令需要在所有主機上執行,可以用xshell遠程連接上所有主機,然后選擇所有會話執行命令,這樣就不需要一臺一臺執行,

以下內容所有主機都要操作:
# 所有主機都關閉防火墻
systemctl stop firewalld && systemctl disable firewalld
# 禁用selinx
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
# 卸載交換記憶體
swapoff -a
sed -i 's/.*swap.*/#&/g' /etc/fstab
# 修改主機名
hostnamectl set-hostname rancher
hostnamectl set-hostname master
hostnamectl set-hostname node
# 移除原先的yum源,安裝aliyun的centos7和epel源
# 這里視情況選擇是否執行
mv /etc/yum.repos.d/* /opt
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache
所有主機安裝docker:
# 所有節點都安裝docker
yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加docker源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安裝docker19
# yum install docker-ce docker-ce-cli containerd.io -y【直接安裝會安裝docker20版本,在rancher中會導致創建集群失敗,】
yum install -y https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
yum install -y https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-cli-19.03.9-3.el7.x86_64.rpm
yum install -y https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-19.03.9-3.el7.x86_64.rpm
# 啟動docker并加入到開機自啟
systemctl start docker && systemctl enable docker.service && systemctl status docker
# 配置docker鏡像加速器,加快pull鏡像到本地的速度
tee /etc/docker/daemon.json << EOF
{
"registry-mirrors":["http://e9yneuy4.mirror.aliyuncs.com"]
}
EOF
# 重新加載daemon組態檔
systemctl daemon-reload && systemctl restart docker

2.2 在rancher主機上部署rancher平臺
2.2.1 匯入docker鏡像(在線pull很慢)
上傳已打包好的鏡像:

[root@rancher ~]# tar tvf rancher-images-v3.tar.gz
-rw-r--r-- root/root 150685111 2020-08-12 18:23 mysql-5.7.tar.gz
-rw-r--r-- root/root 172848467 2020-08-12 18:23 nginx-v1.tar.gz
-rw-r--r-- root/root 183240787 2020-08-12 18:23 php-v1.tar.gz
-rw-r--r-- root/root 14780430 2020-08-12 18:23 rancher-cluster-proportional-autoscaler.tar.gz
-rw-r--r-- root/root 13959239 2020-08-12 18:23 rancher-coredns-coredns.tar.gz
-rw-r--r-- root/root 1515346 2020-08-12 18:23 rancher-coreos-configmap-reload.tar.gz
-rw-r--r-- root/root 16664098 2020-08-12 18:23 rancher-coreos-etcd.tar.gz
-rw-r--r-- root/root 16598580 2020-08-12 18:23 rancher-coreos-flannel.tar.gz
-rw-r--r-- root/root 10472412 2020-08-12 18:23 rancher-coreos-kube-state-metrics.tar.gz
-rw-r--r-- root/root 7038145 2020-08-12 18:23 rancher-coreos-prometheus-config-reloader.tar.gz
-rw-r--r-- root/root 11748765 2020-08-12 18:23 rancher-coreos-prometheus-operator.tar.gz
-rw-r--r-- root/root 17171689 2020-08-12 18:23 rancher-flannel-cni.tar.gz
-rw-r--r-- root/root 92944055 2020-08-12 18:23 rancher-grafana-grafana.tar.gz
-rw-r--r-- root/root 348205574 2020-08-12 18:24 rancher-hyperkube.tar.gz
-rw-r--r-- root/root 113656038 2020-08-12 18:24 rancher-istio-kubectl.tar.gz
-rw-r--r-- root/root 51893585 2020-08-12 18:24 rancher-kube-api-auth.tar.gz
-rw-r--r-- root/root 10424721 2020-08-12 18:24 rancher-metrics-server.tar.gz
-rw-r--r-- root/root 1961881 2020-08-12 18:24 rancher-nginx-ingress-controller-defaultbackend.tar.gz
-rw-r--r-- root/root 198527282 2020-08-12 18:24 rancher-nginx-ingress-controller.tar.gz
-rw-r--r-- root/root 8374715 2020-08-12 18:24 rancher-nginx.tar.gz
-rw-r--r-- root/root 314865 2020-08-12 18:24 rancher-pause.tar.gz
-rw-r--r-- root/root 14874140 2020-08-12 18:24 rancher-prometheus-auth.tar.gz
-rw-r--r-- root/root 9886017 2020-08-12 18:24 rancher-prom-node-exporter.tar.gz
-rw-r--r-- root/root 50643846 2020-08-12 18:24 rancher-prom-prometheus.tar.gz
-rw-r--r-- root/root 105062799 2020-08-12 18:24 rancher-rancher-agent.tar.gz
-rw-r--r-- root/root 246843572 2020-08-12 18:24 rancher-rancher.v2.3.3.tar.gz
-rw-r--r-- root/root 46993317 2020-08-12 18:24 rancher-rke-tools.v0.1.51.tar.gz
-rw-r--r-- root/root 47003155 2020-08-12 18:24 rancher-rke-tools.v0.1.56.tar.gz
拷貝到所有節點,并使用docker加載鏡像:
# 拷貝鏡像到所有節點
[root@rancher ~]# tar xf rancher-images-v3.tar.gz -C /opt/
[root@rancher ~]# scp /opt/*.tar.gz root@192.168.43.245:/opt/
[root@rancher ~]# scp /opt/*.tar.gz root@192.168.43.147:/opt/
# 使用sed -r批量創建docker load陳述句
[root@rancher ~]# ll /opt/*.tar.gz|awk '{print $NF}'|sed -r 's#(.*)#docker load -i \1#'
docker load -i /opt/mysql-5.7.tar.gz
docker load -i /opt/nginx-v1.tar.gz
docker load -i /opt/php-v1.tar.gz
docker load -i /opt/rancher-cluster-proportional-autoscaler.tar.gz
docker load -i /opt/rancher-coredns-coredns.tar.gz
docker load -i /opt/rancher-coreos-configmap-reload.tar.gz
docker load -i /opt/rancher-coreos-etcd.tar.gz
docker load -i /opt/rancher-coreos-flannel.tar.gz
docker load -i /opt/rancher-coreos-kube-state-metrics.tar.gz
docker load -i /opt/rancher-coreos-prometheus-config-reloader.tar.gz
docker load -i /opt/rancher-coreos-prometheus-operator.tar.gz
docker load -i /opt/rancher-flannel-cni.tar.gz
docker load -i /opt/rancher-grafana-grafana.tar.gz
docker load -i /opt/rancher-hyperkube.tar.gz
docker load -i /opt/rancher-istio-kubectl.tar.gz
docker load -i /opt/rancher-kube-api-auth.tar.gz
docker load -i /opt/rancher-metrics-server.tar.gz
docker load -i /opt/rancher-nginx-ingress-controller-defaultbackend.tar.gz
docker load -i /opt/rancher-nginx-ingress-controller.tar.gz
docker load -i /opt/rancher-nginx.tar.gz
docker load -i /opt/rancher-pause.tar.gz
docker load -i /opt/rancher-prometheus-auth.tar.gz
docker load -i /opt/rancher-prom-node-exporter.tar.gz
docker load -i /opt/rancher-prom-prometheus.tar.gz
docker load -i /opt/rancher-rancher-agent.tar.gz
docker load -i /opt/rancher-rancher.v2.3.3.tar.gz
docker load -i /opt/rancher-rke-tools.v0.1.51.tar.gz
docker load -i /opt/rancher-rke-tools.v0.1.56.tar.gz
# 批量匯入鏡像,在所有節點都要匯入,
[root@rancher ~]# ll /opt/*.tar.gz|awk '{print $NF}'|sed -r 's#(.*)#docker load -i \1#' |bash
[root@master ~]# ll /opt/*.tar.gz|awk '{print $NF}'|sed -r 's#(.*)#docker load -i \1#' |bash
[root@node ~]# ll /opt/*.tar.gz|awk '{print $NF}'|sed -r 's#(.*)#docker load -i \1#' |bash
2.2.2 安裝rancher2.3.3
目前最新版本是rancher2.5.3,可以單獨pull最新版的rancher鏡像替換2.3.3,
# 使用鏡像rancher/rancher:v2.3.3創建容器
[root@rancher ~]# sudo docker run --privileged -d --restart=unless-stopped -p 80:80 -p 443:443 -v/var/lib/rancher/:/var/lib/rancher/ rancher/rancher:v2.3.3
66c866de813f5d4284098d626fefc192994f95bea694fbcf162a540494273cda
[root@rancher ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
66c866de813f rancher/rancher:v2.3.3 "entrypoint.sh" 56 seconds ago Up 47 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp sad_hopper
輸入網址:https://192.168.43.175/
①設定登錄密碼:

②詢問這個URL是否可以被所有節點訪問,確認可以就好,

③設定中文界面

④注銷重新登錄:https://192.168.43.175/login

3. 添加集群并為集群添加節點
3.1 創建集群及添加master節點
①創建集群:

②自定義創建k8s集群:

③設定集群名稱和網路驅動:


④配置master節點:

# 創建k8s集群的master節點,即使用鏡像運行一個容器作為master節點
[root@master ~]# sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.3.3 --server https://192.168.43.175 --token q448457pthn8zzvkplxpwkrsn8ddjm8wzrspl54wgjl6m2d65zgw54 --ca-checksum 638d9803e912eceb52d2246f61179802ccfb4b97a526b25ba37da78e78f19cf6 --etcd --controlplane --worker
dea4bf2d798ccc25db021d5d6e3635f28a3938d5cc6187cd7b24b9f54b2fec8d

點擊“完成”即可,
⑤查看k8s集群創建進度,大概幾分鐘就能安裝好,【鏡像在本地,不用pull的情況下】


看到“Active”就表明k8s集群已經安裝成功了,
# 如果遇到報錯,可能是master節點之前安裝過k8s導致的,可以先把原來安裝的k8s先刪掉,再執行上述操作,
# 如果遇到pull有問題,可能是pull太慢導致的,可以考慮先pull到本地,然后使用本地鏡像,
# 可以通過查看k8s的日志和docker容器的日志查看安裝情況:
docker logs 容器名 # docker容器日志
tail -100 /var/log/messages # k8s日志
⑥查看下集群和各節點情況:




3.2 添加node到k8s集群
①編輯集群:

②選擇worker角色,在對應的節點上添加:

# 在node上運行
[root@node ~]# sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.3.3 --server https://192.168.43.175 --token mw776bmzz99wqtfxx2l8pm9rngzlmdfc8772kcl88htvcfjw5xzxwp --ca-checksum c2f26cf0411c030a7e3b71c92667505e083c568eb2a44cc6365cf8b42ed72df8 --worker

③查看集群添加節點情況:


可以看到,node節點也添加進k8s集群中了,
4. 使用rancher自帶監控查看k8s集群運行狀態
①點擊“啟用監控并查看實時監控指標”




②等待安裝grafana組件,可視化監控資料
看到下圖就算安裝成功了:

④查看grafana監控資料



⑤可以選擇監控哪個節點

以上內容就是集群的創建及集群各指標的監控,
5. 分布式LNMP架構部署電商網站
5.1 CoreDNS集群內部服務發現
-
CoreDNS,從kubernetes1.2開始成為了k8s的默認DNS服務器,
-
kubeadm安裝的k8s集群,默認裝有CoreDNS,使用命令
kubeadm init --feature-gates=CoreDNS=true啟用即可, -
在
kubernetes集群中,直接訪問service name,然后通過CoreDNS域名決議服務找到集群IP, -
在rancher環境中已經安裝了CoreDNS服務,無需重復安裝,
5.2 在rancher節點安裝并測驗kubectl
①安裝kubectl
# 配置kubernetes的yum源
[root@rancher ~]# tee /etc/yum.repos.d/kubernetes.repo << 'EOF'
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
[root@rancher ~]# yum install -y kubectl
②創建kubectl組態檔

# 將設定保存到~/.kube/config
# 然后下載kubectl(如有需要)并運行,
apiVersion: v1
kind: Config
clusters:
- name: "lnmp-ecshop"
cluster:
server: "https://192.168.43.175/k8s/clusters/c-g644f"
certificate-authority-data: "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM3akNDQ\
WRhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFvTVJJd0VBWURWUVFLRXdsMGFHVXQKY\
21GdVkyZ3hFakFRQmdOVkJBTVRDV05oZEhSc1pTMWpZVEFlRncweU1ERXlNekV4TURVNE5EaGFGd\
zB6TURFeQpNamt4TURVNE5EaGFNQ2d4RWpBUUJnTlZCQW9UQ1hSb1pTMXlZVzVqYURFU01CQUdBM\
VVFQXhNSlkyRjBkR3hsCkxXTmhNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ\
0tDQVFFQTBuckNaOUZmakorRUl5QlcKQlZBL21jT2JuL2RZSHZxY0pyT200NHZSSmsybTVGZHFWW\
nV1M1pUMXo5YkltK2svdkRTemkwZGI3OUhiUjREbwp4SC9lUTFtWDdEemNuWE9GZ084SnpMbEZkM\
Gl1V21rdXdGNDBFbDRhT3pseGdlcHVDU1RkMW1YdVBmUjlWWHNHCkYxaTgxNEorOVVFRXdaa0V4d\
m1odDJ6aDhYYnpYOWpldTVwbTNjak9LVWRKVk50RXhac2U3My90cDNnMnFiUk8KTVpqN0hBbVpOZ\
ldNL1VlZVQ0S0RDTk53bXFxREh3em1TU1FRYW1aMDI3Y1JmVWxVZktYYjFSUlpNNEN5eGg4aQpBa\
GJYMHUwK3k4WlZiRVFhTXZzbW9vRzNobFdMZHNBbHBrc0tQYmUwczcrOFJIWS9zdEdiQjlQa1E2N\
0ZxbHNmCkIvdXhwUUlEQVFBQm95TXdJVEFPQmdOVkhROEJBZjhFQkFNQ0FxUXdEd1lEVlIwVEFRS\
C9CQVV3QXdFQi96QU4KQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBbm1FVGM4MGFpSUhXUm5OMmZ6Y\
2dzY3BRYVNsano1T1k5UlZEVTVZbQpKd0ROSXhVRUJBL2lmWERhc0ViRHZvWFFtckhJaXNEb1N1e\
DFKS0o3VCs3N1l1RklEeGRQMGtQUGkrT0Jnc0JCCmM3TlRoN2J5S2hrQjNVdWpqdXU2WUhCeXpKZ\
k9jZjJRM1BGYlZ3YkIwd0hjRGdFaUZZc015NkIyNXdnUzFRYlcKaGNEaTNuMXdyeVRJK2VBUzQ5Q\
jB6VHRYcG96MHAwaGt0bVpZSDVlb2NTUnhiZXJubFBNcE43M2dlR1Z6TG9NKwpIV3dFSkdVenZFU\
EV0MVlwRS93RFhMeTZ4bDhJQ0RRK0dZdldpclpia1hsK2h5S21RMTk3bkF4dXNKL1VidHdICkJjb\
ExoTFJaMWJML0V5MHZPenk0dWZKS29TaVBRcGREY0cwcFpzWGRyTHlBK1E9PQotLS0tLUVORCBDR\
VJUSUZJQ0FURS0tLS0t"
- name: "lnmp-ecshop-master"
cluster:
server: "https://192.168.43.245:6443"
certificate-authority-data: "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN3akNDQ\
WFxZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFTTVJBd0RnWURWUVFERXdkcmRXSmwKT\
FdOaE1CNFhEVEl3TVRJek1URXhNRGd6TWxvWERUTXdNVEl5T1RFeE1EZ3pNbG93RWpFUU1BNEdBM\
VVFQXhNSAphM1ZpWlMxallUQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ\
0VCQU5yN3gyMmJYNHpOCndVV3F3YVh6RVIzODIxSjZTR1JEQUpCUDlxZ2VlcGUvU3MrU0VlcW5mR\
HJ5bmRjU09INUhLQ2NqOCtQa0ZmaEgKMURib3k1QXZ1WE5lY05RRitTSHZmbE9oVjZuTmUxTnZ0Z\
0FaNW9JRmFOODM1NDNNaE92U0pPSUhONXJIRXhoVwp2SWQ0azFLbkx4Q08zUC9BVldCR0xJZjIxR\
GlhTzZFbUxwNGV3dEo4ekRSZ2ZsS3BXOEQxYS8xZmg0amVsU2tQCldmeGM2T0lBRjBpbzZWNXVCe\
nYxTVJEWWttWFY3UVlLSWxBQVM0aFVodzVrL0owVVNjTzYxbHl0ZGVMd29zTXYKLzg4NlVPYjA2U\
kFNRVc1d0FOMTJOenFVbTdhUnRXUHRLSkF4ZlJ6blZJMjBxTzk0bzNvcGZvZFUweVJKajFkcgpwd\
lBZYzNqSFpkc0NBd0VBQWFNak1DRXdEZ1lEVlIwUEFRSC9CQVFEQWdLa01BOEdBMVVkRXdFQi93U\
UZNQU1CCkFmOHdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBQlAwaXRnSWFDdXhtQnZXYSs4UkJEM\
2ZqUTRHUGRFVWVMRUcKT0J1dHRDS0tzUWQrV1FiNXRsQ0x3VXlRY1JaVm0rbmNqNkI2dWxuZG5PN\
1VKWndnMS9CVmxsams2eDYxYnBCTgpsZkNpd1Y5RXZKcWJCeG5YTGdaOWJuaXRWaURZNmx6SUtlU\
ndxMW1ZMkNJVVA5TGVPSUdXdlhwWnRXSDdrOGFWCmlHZXdSczlEdjFrMzVOMy9ObFFub3JsY1c4c\
WlwUk02UkQwdnJFM2tVTGcwT09iVUdWV2g3S0Q3M3RYNWJuNHMKNVFaRytibGtmZ3VPTEpWdWYyL\
2tJVm9nQ0plU3RMaCtuS2ZUd2RHcWxDMUl3WWdITE85aUd0SzQ2d2tlTzdkTwp6WitDckwwcTJCK\
1J4TUEyNUErazNQVy9YOHRhWS8zcFFJcVY5cjJDV0w2ZHRBc1JkNjA9Ci0tLS0tRU5EIENFUlRJR\
klDQVRFLS0tLS0K"
users:
- name: "lnmp-ecshop"
user:
token: "kubeconfig-user-2vp8p.c-g644f:g5xhgj4dbpht58gmlrcrfbmvvmg8qc59mf5f47ckvxh9cnpmkbtmbz"
contexts:
- name: "lnmp-ecshop"
context:
user: "lnmp-ecshop"
cluster: "lnmp-ecshop"
- name: "lnmp-ecshop-master"
context:
user: "lnmp-ecshop"
cluster: "lnmp-ecshop-master"
current-context: "lnmp-ecshop"
③將組態檔剪切到rancher節點中
[root@rancher ~]# mkdir ~/.kube
[root@rancher ~]# vim ~/.kube/config
④測驗kubectl命令
[root@rancher ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master Ready controlplane,etcd,worker 60m v1.16.8
node Ready worker 40m v1.16.8
5.3 在rancher節點上使用kubectl命令為node節點部署php服務
# 上傳yaml資源檔案和ecshop的安裝包
[root@rancher ~]# tar tvf lnmp-v5.tar.gz
drwxr-xr-x root/root 0 2020-08-10 11:57 lnmp/
drwxr-xr-x root/root 0 2020-08-04 15:37 lnmp/conf/
-rw-r--r-- root/root 1437 2020-08-04 15:37 lnmp/conf/nginx.conf
drwxr-xr-x root/root 0 2020-07-31 11:11 lnmp/php/
-rw-r--r-- root/root 434 2020-07-28 16:08 lnmp/php/Dockerfile
drwxr-xr-x root/root 0 2020-08-05 11:48 lnmp/nginx/
-rw-r--r-- root/root 281 2020-07-31 14:17 lnmp/nginx/Dockerfile
-rw-r--r-- root/root 65163191 2019-04-18 16:03 lnmp/ecshop.zip
-rw-r--r-- root/root 727 2020-08-04 13:56 lnmp/php-deployment.yaml
-rw-r--r-- root/root 149 2020-08-04 14:10 lnmp/php-svc.yaml
-rw-r--r-- root/root 212 2020-08-04 15:26 lnmp/nginx-svc.yaml
-rw-r--r-- root/root 779 2020-08-04 15:26 lnmp/nginx-deployment.yaml
-rw-r--r-- root/root 202 2020-08-04 15:44 lnmp/mysql-svc.yaml
-rw-r--r-- root/root 739 2020-08-10 11:50 lnmp/mysql-deployment.yaml
[root@rancher ~]# tar xf lnmp-v5.tar.gz
[root@rancher ~]# ll /root/lnmp/
總用量 63660
drwxr-xr-x 2 root root 24 8月 4 15:37 conf
-rw-r--r-- 1 root root 65163191 4月 18 2019 ecshop.zip
-rw-r--r-- 1 root root 739 8月 10 11:50 mysql-deployment.yaml
-rw-r--r-- 1 root root 202 8月 4 15:44 mysql-svc.yaml
drwxr-xr-x 2 root root 24 8月 5 11:48 nginx
-rw-r--r-- 1 root root 779 8月 4 15:26 nginx-deployment.yaml
-rw-r--r-- 1 root root 212 8月 4 15:26 nginx-svc.yaml
drwxr-xr-x 2 root root 24 7月 31 11:11 php
-rw-r--r-- 1 root root 727 8月 4 13:56 php-deployment.yaml
-rw-r--r-- 1 root root 149 8月 4 14:10 php-svc.yaml
①編輯deploy和pod的yaml資源組態檔
[root@rancher ~]# cat /root/lnmp/php-deployment.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-server
labels:
name: php-server
spec:
replicas: 1
selector:
matchLabels:
app: php-server
template:
metadata:
labels:
app: php-server
spec:
nodeSelector:
kubernetes.io/hostname: master # 修改這里即可
containers:
- name: php-server
image: php:v1 # 可以使用docker images命令查看該鏡像有沒有
volumeMounts:
- mountPath: /var/www/html/
name: nginx-data
ports:
- containerPort: 9000
lifecycle:
postStart:
exec:
command: [ "/bin/bash","-c","chown apache:apache /var/www/html -R" ]
volumes:
- name: nginx-data
hostPath:
path: /web/html
②在node節點上配置ecshop資料檔案
[root@rancher ~]# scp /root/lnmp/ecshop.zip root@192.168.43.147:/root/
[root@node ~]# unzip ecshop.zip
[root@node ~]# mkdir -p /web/{html,data}
[root@node ~]# mv ecshop/* /web/html/
[root@node ~]# ls /web/html/
activity.php certi.php htaccess.txt respond.php
admin chinabank_receive.php images robots.txt
affiche.php comment.php includes search.php
affiliate.php compare.php index.php sitemaps.php
alipay.html cycle_image.php install snatch.php
animated_favicon.gif data js tag_cloud.php
api demo languages temp
api.php ecmoban_qq message.php themes
article_cat.php exchange.php mobile topic.php
article.php favicon.ico myship.php user.php
auction.php feed.php package.php vote.php
brand.php flow.php pick_out.php wap
captcha.php gallery.php pm.php wholesale.php
catalog.php goods.php quotation.php widget
category.php goods_script.php receive.php
cert group_buy.php region.php
[root@rancher ~]# kubectl apply -f /root/lnmp/php-deployment.yaml
deployment.apps/php-server created
[root@rancher ~]# kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
php-server 1/1 1 1 16s
[root@rancher ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
php-server-5c7759b5f8-wrnmg 1/1 Running 0 25s
在node節點上,查看/web/html資料檔案是否可寫,并且屬主和屬組都變為了id,而不是用戶名,

③創建service的資源組態檔
[root@rancher ~]# cat /root/lnmp/php-svc.yaml
---
apiVersion: v1
kind: Service
metadata:
name: php
spec:
ports:
- name: php
port: 9000
protocol: TCP
selector:
app: php-server
[root@rancher ~]# kubectl apply -f /root/lnmp/php-svc.yaml
service/php created
[root@rancher ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 113m
php ClusterIP 10.43.70.88 <none> 9000/TCP 17s
5.4 部署nginx服務
①查看nginx組態檔的模板
[root@rancher ~]# cat /root/lnmp/conf/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
include /etc/nginx/default.d/*.conf;
location / {
index index.php;
}
location ~ \.php$ {
# root html;
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
include fastcgi_params;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
nginx的站點根目錄是/usr/share/nginx/htmlphp的決議目錄是/var/www/html/fastcgi_pass指定后端 php 決議地址時只需要指定php-svc的名稱
②使用ConfigMap創建nginx組態檔
ConfigMap 是 k8s 中非常重要的一個資源物件,簡稱 cm,常用于向容器中注入組態檔等操作,不僅可以保存單個屬性值,也可以保存整個組態檔,
[root@rancher ~]# kubectl create configmap lnmp-nginx-config --from-file=/root/lnmp/conf/nginx.conf
configmap/lnmp-nginx-config created
③創建nginx-deployment檔案并部署nginx
[root@rancher ~]# cat /root/lnmp/nginx-deployment.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-shop
spec:
selector:
matchLabels:
app: nginx-shop
replicas: 1
template:
metadata:
labels:
app: nginx-shop
spec:
nodeSelector:
kubernetes.io/hostname: node
containers:
- name: nginx-shop
image: nginx:v1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
volumeMounts:
- name: nginx-data
mountPath: /usr/share/nginx/html
- name: nginx-conf
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf
volumes:
- name: nginx-data
hostPath:
path: /web/html/
- name: nginx-conf
configMap:
name: lnmp-nginx-config
[root@rancher ~]# kubectl apply -f /root/lnmp/nginx-deployment.yaml
deployment.apps/nginx-shop created
[root@rancher ~]# kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-shop 1/1 1 1 111s
php-server 1/1 1 1 17m
[root@rancher ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-shop-6bd98dfd4d-9t6xv 1/1 Running 0 118s
php-server-5c7759b5f8-wrnmg 1/1 Running 0 17m
④創建nginx-svc檔案,并部署service
[root@rancher ~]# cat /root/lnmp/nginx-svc.yaml
---
apiVersion: v1
kind: Service
metadata:
name: nginx-shop
spec:
type: NodePort
ports:
- name: nginx
port: 80
protocol: TCP
targetPort: 80
nodePort: 30010
selector:
app: nginx-shop
[root@rancher ~]# kubectl apply -f /root/lnmp/nginx-svc.yaml
service/nginx-shop created
[root@rancher ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 124m
nginx-shop NodePort 10.43.145.215 <none> 80:30010/TCP 16s
php ClusterIP 10.43.70.88 <none> 9000/TCP 10m
可以測驗下php決議有沒有問題:
http://192.168.43.147:30010/

看到以上內容,說明nginx服務已經正確部署,并可以正確決議php,
5.5 部署mysql
①部署deployment和pods
[root@rancher ~]# cat /root/lnmp/mysql-deployment.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
namespace: default
labels:
k8s-app: mysql
spec:
selector:
matchLabels:
k8s-app: mysql
replicas: 1
template:
metadata:
labels:
k8s-app: mysql
spec:
nodeSelector:
kubernetes.io/hostname: node # 部署節點
containers:
- name: mysql
image: mysql:5.7 # mysql鏡像
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306 # 容器埠號
protocol: TCP
volumeMounts:
- name: mysql-data
mountPath: /var/lib/mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456" # root用戶密碼
volumes:
- name: mysql-data
hostPath:
path: /web/data/ # 資料目錄
[root@rancher ~]# kubectl apply -f /root/lnmp/mysql-deployment.yaml
deployment.apps/mysql created
[root@rancher ~]# kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
mysql 1/1 1 1 105s
nginx-shop 1/1 1 1 12m
php-server 1/1 1 1 27m
[root@rancher ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
mysql-57595b8f98-f2lnl 1/1 Running 0 109s
nginx-shop-6bd98dfd4d-9t6xv 1/1 Running 0 12m
php-server-5c7759b5f8-wrnmg 1/1 Running 0 27m
②部署service
[root@rancher ~]# cat /root/lnmp/mysql-svc.yaml
---
apiVersion: v1
kind: Service
metadata:
name: mysql
labels:
k8s-app: mysql
spec:
ports:
- name: mysql
port: 3306
protocol: TCP
targetPort: 3306
selector:
k8s-app: mysql
[root@rancher ~]# kubectl apply -f /root/lnmp/mysql-svc.yaml
service/mysql created
[root@rancher ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 134m
mysql ClusterIP 10.43.25.213 <none> 3306/TCP 15s
nginx-shop NodePort 10.43.145.215 <none> 80:30010/TCP 10m
php ClusterIP 10.43.70.88 <none> 9000/TCP 20m
5.6 ingress實時監聽apiserver
- 發布服務是通過反向代理實作的,即nginx反向代理k8s中的服務,但是nginx并不能實時監測后端pod的變化,若修改了后端服務,需手動修改nginx配置,
- 對于ingress,擁有一個監聽器,可以通過監聽kube-apiserver來感知后端service和pod的變化,然后根據ingress的配置將后端資訊更新給nginx做反向代理,
- 邊緣節點:k8s中對外提供服務的節點,如果k8s集群中每一臺主機都擁有公網IP,那所有的都是邊緣節點,
- ingress作業原理:發布服務時,將域名決議到集群邊緣節點,然后ingress匹配域名規則,將請求轉發至相應的服務,
- 在rancher中,自帶服務發布功能,是通過nginx實作 ,建議使用
Traefik,
①添加規則

填寫規則名稱->自定義域名->填寫域名

添加服務->服務選擇“nginx-shop”->埠(服務名)選擇“nginx”


5.7 安裝ecshop
①配置域名決議:
在本地配置域名與IP對應關系:
C:\Windows\System32\drivers\etc

# 用notepad++打開,記事本打開應該保存不了
# 在hosts檔案末尾加上這句
192.168.43.147 shop.com
②安裝ecshop
輸入網址:http://shop.com
谷歌應該打不開,要用火狐,





③打開首頁及后臺:
首頁:http://shop.com/

后臺:http://shop.com/admin/privilege.php?act=login

6. 總結
- docker裝的是19版本,鏡像倉庫用的是aliyun的,加快pull速度,
- 在線pull安裝rancher的速度非常慢,建議先pull需要的鏡像,保存到本地,
- 如果所有的鏡像都有,那創建k8s集群是很快的,如果5分鐘還沒搞定,可能是因為有的鏡像沒有,docker在線pull中,
- 如果所有的鏡像都有,但還是報錯,可能是裝rancher、master、node的主機之前裝過k8s,要把之前的檔案洗掉干凈,還原也可以,
- 部署php、nginx、mysql的方法差不多,都是先部署deployment和pod,再部署service
- 把ecshop的網頁資料放到呼叫的位置即可,本文放到node節點上的/web/html目錄,而mysql資料的存放位置在node節點的/web/data目錄下,
- 通過ingress添加規則,將域名決議到邊緣節點,然后外部用戶就可以通過域名訪問k8s集群中的服務,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/243550.html
標籤:其他
上一篇:C語言編程>第十周 ⑤ 學生的記錄由學號和成績組成,M名學生的資料已在主函式中放入結構體陣列stu中,請撰寫函式fun,它的功能是:函式回傳指定學號的學生資料,指定的學號在主函式中輸入。
下一篇:計算機網路-網路層筆記
