架構(gòu)班的小伙伴作業(yè)看這里哦:(學(xué)習(xí)杰哥視頻的作業(yè)第33-34天)
1族吻、創(chuàng)建jdk和tomcat鏡像梧乘,使用?nginx?+?tomcat?+?NFS?實(shí)現(xiàn)web請求的動靜分離
一晚唇、 基于基礎(chǔ)的linux系統(tǒng)(centos/ubuntu/alpine)鏡像贞言,制作Nginx基礎(chǔ)鏡像
1.1 Centos基礎(chǔ)鏡像制作
# tree /opt/k8s-data/dockerfile/system/centos
├── build-command.sh
├── Dockerfile
└── filebeat-6.8.1-x86_64.rpm
1.2 Dockerfile文件內(nèi)容
FROM harbor.magedu.net/baseimages/centos:7.6.1810
ADD filebeat-6.8.1-x86_64.rpm /tmp/
RUN yum install -y epel-release /tmp/filebeat-6.5.4-x86_64.rpm && rm -rf /tmp/filebeat-6.5.4-x86_64.rpm
RUN yum install -y vim wget tree pcre pcre-devel gcc gcc-c++ zlib zlib-devel openssl openssl-devel net-tools iotop unzip zip iproute ntpdate nfs-utils tcp dump telnet traceroute
RUN rm -rf /etc/localtime && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
1.3 build-command腳本
#!/bin/bash docker build -t harbor.magedu.net/baseimages/centos-base:v7.6 .?
sleep1
docker push harbor.magedu.net/baseimages/centos-base:v7.6
1.4 執(zhí)行構(gòu)建centos 基礎(chǔ)鏡像
# bash build-command.sh
2.1 Nginx 基礎(chǔ)鏡像制作
# tree /opt/k8s-data/dockerfile/pub-images/nginx-base
├── build-command.sh
├── Dockerfile
└── nginx-1.14.2.tar.gz
2.2 Dockerfile文件內(nèi)容
#Nginx Base Image
FROM harbor.magedu.net/baseimages/centos-base:v7.6
RUN yum install -y vim wget tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop
ADD nginx-1.14.2.tar.gz /usr/local/src/
RUN cd /usr/local/src/nginx-1.14.2 && ./configure && make && make install && ln -sv /usr/local/nginx/sbin/nginx /usr/sbin/nginx && useradd nginx -u 2001
2.3 build-command腳本
#!/bin/bash docker build -t harbor.magedu.net/pub-images/nginx-base:v1.14.2 .
sleep 1
docker push harbor.magedu.net/pub-images/nginx-base:v1.14.2
2.4 執(zhí)行構(gòu)建Nginx基礎(chǔ)鏡像
# bash build-command.sh
二贯溅、基于基礎(chǔ)的linux系統(tǒng)(centos/ubuntu/alpine)鏡像冠胯,制作JDK基礎(chǔ)鏡像火诸、Tomcat鏡像
1.1 JDK基礎(chǔ)鏡像制作
# tree /opt/k8s-data/dockerfile/pub-images/jdk-1.8.212
├── build-command.sh
├── Dockerfile
├── jdk-8u212-linux-x64.tar.gz
└── profile
1.2 Dockerfile文件內(nèi)容
#JDK Base Image
FROM harbor.magedu.net/baseimages/centos-base:v7.6
ADD jdk-8u212-linux-x64.tar.gz /usr/local/src/
RUN ln -sv /usr/local/src/jdk1.8.0_212 /usr/local/jdk && groupadd tomcat -g 2018 && useradd tomcat -u 2018 -g 2018
ADD profile /etc/profile
ENV JAVA_HOME /usr/local/jdk
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/:$JRE_HOME/lib/
ENV PATH $PATH:$JAVA_HOME/bin
1.3 build-command腳本
#!/bin/bash docker build -t harbor.magedu.net/pub-images/jdk-base:v8.212 .
sleep 1
docker push harbor.magedu.net/pub-images/jdk-base:v8.212
1.4 執(zhí)行構(gòu)建JDK基礎(chǔ)鏡像
# bash build-command.sh
2.1 tomcat基礎(chǔ)鏡像制作
# tree /opt/k8s-data/dockerfile/pub-images/tomcat-base
├── apache-tomcat-8.5.43.tar.gz
├── build-command.sh
└── Dockerfile
2.2 Dockerfile文件內(nèi)容
#JDK Base Image
FROM harbor.magedu.net/pub-images/jdk-base:v8.212
RUN mkdir /apps /data/tomcat/webapps /data/tomcat/logs -pv
ADD apache-tomcat-8.5.43.tar.gz /apps
RUN ln -sv /apps/apache-tomcat-8.5.43 /apps/tomcat && chown -R tomcat.tomcat /apps /data -R
#ADD filebeat-6.4.2-x86_64.rpm /tmp/
#RUN yum install -y /tmp/filebeat-6.4.2-x86_64.rpm && rm -rf /tmp/filebeat-6.4.2- x86_64.rpm
2.3 build-command腳本
#!/bin/bash docker build -t harbor.magedu.net/pub-images/tomcat-base:v8.5.43 .
sleep 1
docker push harbor.magedu.net/pub-images/tomcat-base:v8.5.43
2.4 構(gòu)建tomcat基礎(chǔ)鏡像
# bash build-command.sh
3.1 tomcat業(yè)務(wù)鏡像app1制作
# tree /opt/k8s-data/dockerfile/linux36/tomcat-app1
├── app1.tar.gz
├── build-command.sh
├── catalina.sh
├── Dockerfile
├── filebeat.yml
├── myapp
│? └── index.html
├── run_tomcat.sh
└── server.xml
3.2 Dockerfile文件內(nèi)容
#tomcat web1
FROM harbor.magedu.net/pub-images/tomcat-base:v8.5.43
ADD catalina.sh /apps/tomcat/bin/catalina.sh
ADD server.xml /apps/tomcat/conf/server.xml
#ADD myapp/* /data/tomcat/webapps/myapp/
ADD app1.tar.gz /data/tomcat/webapps/myapp/
ADD run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh
#ADD filebeat.yml /etc/filebeat/filebeat.yml
RUN chown -R tomcat.tomcat /data/ /apps/
EXPOSE 8080 8443
CMD ["/apps/tomcat/bin/run_tomcat.sh"]
3.3 build-command腳本
#!/bin/bash TAG=$1
docker build -t harbor.magedu.net/linux36/tomcat-app1:${TAG} .
sleep 3
docker push harbor.magedu.net/linux36/tomcat-app1:${TAG}
3.4 執(zhí)行構(gòu)建tomcat業(yè)務(wù)鏡像
# bash build-command.sh
三、k8s中nginx+tomcat實(shí)現(xiàn)動靜分離
? ? ? ?實(shí)現(xiàn)一個(gè)通用的nginx+tomcat動靜分離web架構(gòu)荠察,即用戶訪問的靜態(tài)頁面和圖片在由nginx直接響應(yīng)置蜀,而動態(tài)請求則基于location轉(zhuǎn)發(fā)至tomcat。重點(diǎn):Nginx基于tomcat的service name轉(zhuǎn)發(fā)用戶請求到tomcat業(yè)務(wù)app
1.1 Nginx業(yè)務(wù)鏡像制作
# tree /opt/k8s-data/dockerfile/linux36/nginx
├── build-command.sh
├── Dockerfile
├── index.html
├── nginx.conf
└── webapp
└── index.html
1.2 Dockerfile文件內(nèi)容
#Nginx Base Image
FROM harbor.magedu.net/pub-images/nginx-base:v1.14.2
ADD nginx.conf /usr/local/nginx/conf/nginx.conf
ADD webapp/* /usr/local/nginx/html/webapp/
ADD index.html /usr/local/nginx/html/index.html
#RUN mkdir /usr/local/nginx/html/webapp/about /usr/local/nginx/html/webapp/images EXPOSE 80 443
CMD ["nginx"]
1.3 build-command腳本
#!/bin/bash docker build -t harbor.magedu.net/linux36/nginx-web1:v1 .
sleep 1
docker push harbor.magedu.net/linux36/nginx-web1:v1
1.4 nginx配置文件
upstream tomcat_webserver {
? ? server linux36-tomcat-app1-service.linux36.svc.linux36.local:80;
}
server {
? ? location /myapp{
? ? ? ? proxy_pass http://tomcat_webserver;
? ? ? ? proxy_set_header Host $host;
? ? ? ? proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
? ? ? ? proxy_set_header X-Real-IP $remote_addr;
? ? }
}
1.5 執(zhí)行構(gòu)建Nginx 業(yè)務(wù)鏡像
# bash build-command.sh
2.1?NFS 服務(wù)器環(huán)境準(zhǔn)備
# mkdir /data/linux36/images #圖片目錄
# mkdir /data/linux36/static #靜態(tài)文件目錄
# vim /etc/exports
/data/linux36 *(rw,no_root_squash)
# systemctl restart nfs-server
2.2 NFS客戶端掛載并測試寫入文件
# mount -t nfs 192.168.7.108:/data/linux36 /mnt
# cp /etc/passwd /mnt/? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #必須能夠?qū)懭霐?shù)據(jù)
3 nginx 業(yè)務(wù)容器yaml
/opt/k8s-data/yaml/linux36/tomcat-app1/tomcat-app1.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
? ? labels:
? ? ? ? app: linux36-tomcat-app1-deployment-label
? ? name: linux36-tomcat-app1-deployment
? ? namespace: linux36
spec:
? ? replicas: 1
? ? selector:
? ? ? ? matchLabels:
? ? ? ? ? ? app: linux36-tomcat-app1-selector
? ? template:
? ? ? ? metadata:
? ? ? ? labels:
? ? ? ? ? ? app: linux36-tomcat-app1-selector
? ? spec:
? ? ? ? containers:
? ? ? ? - name: linux36-tomcat-app1-container
? ? ? ? ? ? image: harbor.magedu.net/linux36/tomcat-app1:2019-08-02_11_02_30
? ? ? ? ? ? #command: ["/apps/tomcat/bin/run_tomcat.sh"]
? ? ? ? ? ? #imagePullPolicy: IfNotPresent
? ? ? ? ? ? imagePullPolicy: Always
? ? ? ? ? ? ports:
? ? ? ? ? ? - containerPort: 8080
? ? ? ? ? ? ? ? protocol: TCP
? ? ? ? ? ? ? ? name: http
? ? ? ? volumeMounts:
? ? ? ? ? ? - name: linux36-images
? ? ? ? ? ? ? ? mountPath: /data/tomcat/webapps/myapp/images
? ? ? ? ? ? ? ? readOnly: false
? ? ? ? ? ? - name: linux36-static
? ? ? ? ? ? ? ? mountPath: /data/tomcat/webapps/myapp/static
? ? ? ? ? ? ? ? readOnly: false
? ? ? ? ? ? ? ? volumes:
? ? ? ? ? ? - name: linux36-images
? ? ? ? ? ? ? ? nfs:server: 192.168.7.108
? ? ? ? ? ? ? ? path: /data/linux36/images
? ? ? ? ? ? - name: linux36-static
? ? ? ? ? ? ? ? nfs:
? ? ? ? ? ? ? ? ? ? server: 192.168.7.108
? ? ? ? ? ? ? ? ? ? path: /data/linux36/static
---
kind: Service
apiVersion: v1
metadata:
? ? labels:
? ? ? ? app: linux36-tomcat-app1-service-label
? ? name: linux36-tomcat-app1-service
? ? namespace: linux36
spec:
? ? type: NodePort
? ? ? ? ports:
? ? ? ? ? ? - name: http
? ? ? ? ? ? ? ? port: 80
? ? ? ? ? ? ? ? protocol: TCP
? ? ? ? ? ? ? ? targetPort: 8080
? ? ? ? ? ? ? ? nodePort: 30003
? ? ? ? ? ? ? ? selector:
? ? ? ? ? ? ? ? app: linux36-tomcat-app1-selector
4 創(chuàng)建Nginx pod
# kubectl apply -f nginx.yaml
5 pod中驗(yàn)證NFS掛載
# kubectl get pods -n linux36
6 tomcat業(yè)務(wù)pod更新掛載
/opt/k8s-data/yaml/linux36/tomcat-app1/tomcat-app1.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
? ? labels:
? ? ? ? app: linux36-tomcat-app1-deployment-label
? ? name: linux36-tomcat-app1-deployment
? ? namespace: linux36
spec:
? ? replicas: 1
? ? selector:
? ? ? ? matchLabels:
? ? ? ? ? ? app: linux36-tomcat-app1-selector
? ? template:
? ? ? ? metadata:
? ? ? ? labels:
? ? ? ? ? ? app: linux36-tomcat-app1-selector
? ? spec:
? ? ? ? containers:
? ? ? ? - name: linux36-tomcat-app1-container
? ? ? ? ? ? image: harbor.magedu.net/linux36/tomcat-app1:2019-08-02_11_02_30
? ? ? ? ? ? #command: ["/apps/tomcat/bin/run_tomcat.sh"]
? ? ? ? ? ? #imagePullPolicy: IfNotPresent
? ? ? ? ? ? imagePullPolicy: Always
? ? ? ? ? ? ports:
? ? ? ? ? ? - containerPort: 8080
? ? ? ? ? ? ? ? protocol: TCP
? ? ? ? ? ? ? ? name: http
? ? ? ? volumeMounts:
? ? ? ? ? ? - name: linux36-images
? ? ? ? ? ? ? ? mountPath: /data/tomcat/webapps/myapp/images
? ? ? ? ? ? ? ? readOnly: false
? ? ? ? ? ? - name: linux36-static
? ? ? ? ? ? ? ? mountPath: /data/tomcat/webapps/myapp/static
? ? ? ? ? ? ? ? readOnly: false
? ? ? ? ? ? ? ? volumes:
? ? ? ? ? ? - name: linux36-images
? ? ? ? ? ? ? ? nfs:server: 192.168.7.108
? ? ? ? ? ? ? ? path: /data/linux36/images
? ? ? ? ? ? - name: linux36-static
? ? ? ? ? ? ? ? nfs:
? ? ? ? ? ? ? ? ? ? server: 192.168.7.108
? ? ? ? ? ? ? ? ? ? path: /data/linux36/static
---
kind: Service
apiVersion: v1
metadata:
? ? labels:
? ? ? ? app: linux36-tomcat-app1-service-label
? ? name: linux36-tomcat-app1-service
? ? namespace: linux36
spec:
? ? type: NodePort
? ? ? ? ports:
? ? ? ? ? ? - name: http
? ? ? ? ? ? ? ? port: 80
? ? ? ? ? ? ? ? protocol: TCP
? ? ? ? ? ? ? ? targetPort: 8080
? ? ? ? ? ? ? ? nodePort: 30003
? ? ? ? ? ? ? ? selector:
? ? ? ? ? ? ? ? app: linux36-tomcat-app1-selector
7 執(zhí)行更新tomcat app1業(yè)務(wù)容器yaml
# kubectl apply -f tomcat- app1.yaml
四悉盆、訪問web測試
1 上傳數(shù)據(jù)到NFS
# tree /data/linux36
├── images
│? └── 1.jpg
└── static
└── index.html
2 訪問nginx 業(yè)務(wù)pod
3 訪問tomcat業(yè)務(wù)pod
參考資料鏈接:http://www.reibang.com/p/b5d11e88deaa
2盯荤、實(shí)現(xiàn)k8s一個(gè)pod多個(gè)容器實(shí)現(xiàn)LNMP的wordpress服務(wù)
? ? ? ?LNMP案例之基于Nginx+PHP實(shí)現(xiàn)WordPress博客站點(diǎn),要求Nginx+PHP運(yùn)行在同一個(gè)Pod的不同容器焕盟,MySQL 運(yùn)行與default的namespace并可以通過service name增刪改查數(shù)據(jù)庫秋秤。
PHP代碼通過NFS共享掛載到每個(gè)容器的的代碼目錄中
https://cn.wordpress.org/
https://cn.wordpress.org/download/releases/
wordpress-5.0.2-zh_CN.tar.gz
1:準(zhǔn)備PHP鏡像:
1.1:官方PHP鏡像:
https://hub.docker.com/
1.2:自制PHP鏡像:
# docker pull php:5.6.40-fpm
# docker tag php:5.6.40-fpm harbor.magedu.net/linux36/php:5.6.40-fpm
# docker push harbor.magedu.net/linux36/php:5.6.40-fpm
# pwd
/opt/k8s-data/dockerfile/linux36/wordpress/php
# tree
.
├── build-command.sh
├── Dockerfile
├── run_php.sh
└── www.conf
0 directories, 4 files
# bash build-command.sh v1
2:準(zhǔn)備Nginx鏡像:
# pwd
/opt/k8s-data/dockerfile/linux36/wordpress/nginx
# tree
.
├── build-command.sh
├── Dockerfile
├── index.html
├── nginx.conf
└── run_nginx.sh
0 directories, 5 files
# bash build-command.sh v1
3:運(yùn)行WordPress站點(diǎn):
使用官方PHP鏡像運(yùn)行PHP環(huán)境,WordPress頁面文件保存在后端存儲NFS服務(wù)器脚翘。
3.1:運(yùn)行WordPress:
# pwd
/opt/k8s-data/yaml/linux36/wordpress
# kubectl apply -f .
deployment.extensions/wordpress-app-deployment created
service/wordpress-app-spec created
3.2:創(chuàng)建PHP測試頁:
準(zhǔn)備WordPress頁面文件并更改權(quán)限為指定用戶
# pwd
/data/k8sdata/linux36/wordpress
# cat test.php
<?php
phpinfo();
?>
linux36# chown 2001.2001 wordpress/ -R
3.3:訪問PHP測試頁:
4:初始化WordPress站點(diǎn):
使用k8s中運(yùn)行的mysql服務(wù)航缀,作為mysql服務(wù)器
4.1:k8s中MySQL創(chuàng)建數(shù)據(jù)庫:
# kubectl exec -it mysql-0 sh -n linux36
.....
mysql> CREATE DATABASE wordpress;
Query OK, 1 row affected (0.01 sec)
mysql> GRANT ALL PRIVILEGES ON wordpress.* TO "wordpress"@"%" IDENTIFIED BY
"wordpress";
Query OK, 0 rows affected, 1 warning (0.01 sec)
4.2:k8s中測試MySQL連接:
# mysql -uwordpress -hmysql-0.mysql -pwordpress
4.3:通過web界面初始化數(shù)據(jù)庫:
4.4:WordPress數(shù)據(jù)庫連接配置:
~ wordpress# cp wp-config-sample.php wp-config.php
# cat wp-config.php
<?php
/**
* WordPress基礎(chǔ)配置文件。
*
* 這個(gè)文件被安裝程序用于自動生成wp-config.php配置文件堰怨,
* 您可以不使用網(wǎng)站芥玉,您需要手動復(fù)制這個(gè)文件,
* 并重命名為“wp-config.php”备图,然后填入相關(guān)信息灿巧。
*
* 本文件包含以下配置選項(xiàng):
*
* * MySQL設(shè)置
* * 密鑰
* * 數(shù)據(jù)庫表名前綴
* * ABSPATH
*
* @link https://codex.wordpress.org/zh-cn:%E7%BC%96%E8%BE%91_wp-config.php
*
* @package WordPress
*/
// ** MySQL 設(shè)置 - 具體信息來自您正在使用的主機(jī) ** //
/** WordPress數(shù)據(jù)庫的名稱 */
define('DB_NAME', 'wordpress');
/** MySQL數(shù)據(jù)庫用戶名 */
define('DB_USER', 'wordpress');
/** MySQL數(shù)據(jù)庫密碼 */
define('DB_PASSWORD', 'wordpress');
/** MySQL主機(jī) */
define('DB_HOST', 'mysql-0.mysql');
/** 創(chuàng)建數(shù)據(jù)表時(shí)默認(rèn)的文字編碼 */
define('DB_CHARSET', 'utf8');
/** 數(shù)據(jù)庫整理類型。如不確定請勿更改 */
define('DB_COLLATE', '');
/**#@+
* 身份認(rèn)證密鑰與鹽揽涮。
.............................
5:驗(yàn)證k8s中mysql 數(shù)據(jù):
分別驗(yàn)證k8s中MySQL主庫和從庫是否數(shù)據(jù)
5.1:master數(shù)據(jù):
5.2:slave數(shù)據(jù)庫: