一、練手:k8s部署部署wordpress+mysql
wordpress是用于快速搭建博客系統(tǒng)。
1、創(chuàng)建wordpress命名空間
# 創(chuàng)建namespace
kubectl create namespace wordpress
# 查看namespace列表
kubectl get ns
2、創(chuàng)建mysql數(shù)據(jù)庫
# 新建wordpress-db.yaml文件
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: mysql-deploy
namespace: wordpress
labels:
app: mysql
spec:
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.6
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306
name: dbport
env:
- name: MYSQL_ROOT_PASSWORD
value: rootPassW0rd
- name: MYSQL_DATABASE
value: wordpress
- name: MYSQL_USER
value: wordpress
- name: MYSQL_PASSWORD
value: wordpress
volumeMounts:
- name: db
mountPath: /var/lib/mysql
volumes:
- name: db
hostPath:
path: /var/lib/mysql
---
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: wordpress
spec:
selector:
app: mysql
ports:
- name: mysqlport
protocol: TCP
port: 3306
targetPort: dbport
該yaml文件創(chuàng)建一個(gè)mysql,并且生成一個(gè)service,service對(duì)外暴露的端口是3306
# 根據(jù)wordpress-db.yaml創(chuàng)建資源[mysql數(shù)據(jù)庫]
kubectl apply -f wordpress-db.yaml
# 查看pod
kubectl get pods -n wordpress -o wide
# 查看詳情,查看pod部署進(jìn)度
kubectl describe pod mysql-deploy-78cd6964bd-smq4k -n wordpress
# 記得獲取ip,因?yàn)閣ordpress.yaml文件中要修改
[root@m ~]# kubectl get svc mysql -n wordpress
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mysql ClusterIP 10.104.214.22 <none> 3306/TCP 42m
kubectl describe svc mysql -n wordpress
3、創(chuàng)建wordpress應(yīng)用
# 創(chuàng)建wordpress.yaml
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: wordpress-deploy
namespace: wordpress
labels:
app: wordpress
spec:
template:
metadata:
labels:
app: wordpress
spec:
containers:
- name: wordpress
image: wordpress
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
name: wdport
env:
- name: WORDPRESS_DB_HOST
value: mysql:3306 # 改為service的name,不需要每次都指定ip
- name: WORDPRESS_DB_USER
value: wordpress
- name: WORDPRESS_DB_PASSWORD
value: wordpress
---
apiVersion: v1
kind: Service
metadata:
name: wordpress
namespace: wordpress
spec:
type: NodePort # NodePort類型
selector:
app: wordpress
ports:
- name: wordpressport
protocol: TCP
port: 80
targetPort: wdport
# #修改其中mysql的ip地址,其實(shí)也可以使用service的name:mysql
kubectl apply -f wordpress.yaml
# 查看詳情,查看pod部署進(jìn)度
kubectl describe pod mysql-deploy-78cd6964bd-smq4k -n wordpress
[root@m ~]# kubectl get pods -n wordpress -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mysql-deploy-78cd6964bd-smq4k 1/1 Running 0 71m 192.168.80.193 w2 <none> <none>
wordpress-deploy-6498447888-c9287 1/1 Running 0 116s 192.168.190.65 w1 <none> <none>
# 獲取到轉(zhuǎn)發(fā)后的端口,如80端口轉(zhuǎn)到本機(jī)的30493端口
[root@m ~]# kubectl get svc -n wordpress
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mysql ClusterIP 10.104.214.22 <none> 3306/TCP 71m
wordpress NodePort 10.111.92.1 <none> 80:30493/TCP 2m7s
我們發(fā)現(xiàn),搭建成功了,用瀏覽器訪問192.168.56.101:30493,發(fā)現(xiàn)訪問成功了!
4、小結(jié)
在集群中,pod之間可以通過service 的name進(jìn)行訪問,不僅僅是ip,這就意味著,service中不僅幫我們做了負(fù)載均衡,而且做了dns處理。
二、實(shí)戰(zhàn):部署自己的springboot項(xiàng)目
1、準(zhǔn)備一個(gè)springboot項(xiàng)目
訪問:http://localhost:8080/k8s
先試用maven打成一個(gè)jar包:
# maven打包
mvn clean pakcage
# 上傳到服務(wù)器
[root@m spring-boot]# pwd
/root/spring-boot
[root@m spring-boot]# ll
total 17140
-rw-r--r--. 1 root root 17547894 Jul 5 15:54 springboot-demo-0.0.1-SNAPSHOT.jar
注意!這一步通常來說使用jenkins完成,此處我們是手動(dòng)完成的。
2、使用docker打成鏡像
(1)編寫Dockerfile:
FROM openjdk:8-jre-alpine
COPY springboot-demo-0.0.1-SNAPSHOT.jar /springboot-demo.jar
ENTRYPOINT ["java","-jar","/springboot-demo.jar"]
# 根據(jù)Dockerfile創(chuàng)建image
docker build -t springboot-demo-image .
# 查看是否成功打成了鏡像
docker images
(2)將鏡像推送至dockerhub
docker鏡像深入學(xué)習(xí),docker鏡像發(fā)布公有云與私有云
# 登錄阿里云鏡像倉庫 # 需要輸入密碼
docker login --username=沙里溝第二小學(xué)扛把子 registry.cn-hangzhou.aliyuncs.com
docker tag springboot-demo-image registry.cn-hangzhou.aliyuncs.com/cxf01/springboot-demo-image:v1.0
docker push registry.cn-hangzhou.aliyuncs.com/cxf01/springboot-demo-image:v1.0
# 登錄 ,需要輸入密碼
docker login --username=沙里溝第二小學(xué)扛把子 registry.cn-hangzhou.aliyuncs.com
# 私有云的話,需要在k8s添加憑證
kubectl create secret docker-registry <secret-name> \
--docker-username=<username> \
--docker-password=<password> \
--docker-email=<email> \
--docker-server=<registry>
<secret-name> 是您為 secret 指定的名稱,例如 my-registry-secret。
<username> 是您在鏡像倉庫的用戶名。
<password> 是您在鏡像倉庫的密碼。
<email> 是與您在鏡像倉庫的賬號(hào)相關(guān)聯(lián)的電子郵件。
<registry> 是您的鏡像倉庫地址。
接下來,您需要在使用該憑證的部署(deployment)或其他相關(guān)資源中引用該 secret。可以在相關(guān)資源的定義文件中添加以下部分
spec:
template:
spec:
imagePullSecrets:
- name: <secret-name>
(3)運(yùn)行測試
# 運(yùn)行
docker run -d --name s1 springboot-demo-image # 未做端口映射
# 訪問
docker inspect s1
curl 172.17.0.2:8080/k8s # 未做端口映射,只能訪問容器ip
3、使用k8s部署springboot
# 以Deployment部署Pod
# vi springboot-demo.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: springboot-demo
spec:
selector:
matchLabels:
app: springboot-demo
replicas: 1
template:
metadata:
labels:
app: springboot-demo
spec:
imagePullSecrets: # 私有云憑證
- name: springboot-demo
containers:
- name: springboot-demo
image: registry.cn-hangzhou.aliyuncs.com/cxf01/springboot-demo-image:v1.0 # 記得改
ports:
- containerPort: 8080
---
# 創(chuàng)建Pod的Service service的80端口指向pod的8080
apiVersion: v1
kind: Service
metadata:
name: springboot-demo
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: springboot-demo
---
# 創(chuàng)建Ingress,定義訪問規(guī)則,一定要記得提前創(chuàng)建好nginx ingress controller
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: springboot-demo
spec:
rules:
- host: k8s.demo.cxf
http:
paths:
- path: /
backend:
serviceName: springboot-demo
servicePort: 80
# 啟動(dòng)
kubectl apply -f springboot-demo.yaml
kubectl get pods
kubectl get pods -o wide # 查看pod詳細(xì)信息 -192.168.80.194
curl 192.168.80.194:8080/k8s
kubectl get svc # 查看service - 10.106.125.90 80:8080
kubectl get ingress # 查看ingress
# 查看詳情,查看pod部署進(jìn)度
kubectl describe pod springboot-demo-6d88c74d5b-l9m7k
kubectl scale deploy springboot-demo --replicas=5 # 擴(kuò)容為5個(gè)
三、實(shí)戰(zhàn):部署springcloud項(xiàng)目
1、部署nacos
(1)下載部署nacos server1.0.0
github:https://github.com/alibaba/nacos/releases
01 上傳nacos-server-1.0.0.tar.gz到阿里云服務(wù)器:/usr/local/nacos
02 解壓:tar -zxvf
03 進(jìn)入到bin目錄執(zhí)行:sh startup.sh -m standalone [需要有java環(huán)境的支持]
04 瀏覽器訪問:192.168.56.100:8848/nacos
05 用戶名和密碼:nacos
2、微服務(wù)注冊(cè)到nacos的地址問題
我們有微服務(wù)user、order,在pod注冊(cè)到nacos上的地址,默認(rèn)是pod的內(nèi)部地址。
如果在同一個(gè)k8s集群下,這樣部署是沒問題的,但是不同k8s集群下,微服務(wù)之間就互相不可訪問了。文章來源:http://www.zghlxwxcb.cn/news/detail-527769.html
(1)使用host模式
...
metadata:
labels:
app: order
spec:
# 主要是加上這句話,注意在order.yaml的位置
hostNetwork: true
containers:
- name: order
image: registry.cn-hangzhou
...
如上,加上hostNetwork: true,就會(huì)在nacos上注冊(cè)的ip端口,會(huì)映射成宿主機(jī)的ip和端口。文章來源地址http://www.zghlxwxcb.cn/news/detail-527769.html
到了這里,關(guān)于Kubernetes(k8s)實(shí)戰(zhàn):Kubernetes(k8s)部署Springboot項(xiàng)目的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!