安裝環境
- 操作系統:centos7
- docker:1.13.1
- k8s: 1.5.2(單節點)
- 如果沒有安裝docker和k8s的參照我前一篇博客安裝安裝k8s踩的一些坑
部署安裝步驟
1、先在docker裏面安裝redis、pgsql、zookeeper、
1.1 docker search imageName //搜索鏡像 選擇合適版本然後
1.2 docker pull imageName //拉下鏡像
1.3 docker images //查看自己的鏡像倉庫是否有
1.4 docker運行zookeeper、redis、pgsql安裝:
docker run -d docker.io/redis --name myredis -p 6379:6379 redis --requirepass "123456"
docker run --name postgres -e POSTGRES_PASSWORD=123456 -p 5432:5432 -d docker.io/borgius/pgsql
docker run --privileged=true -d --name zookeeper1 --publish 2181:2181 -d docker.io/zookeeper
2、將自己的服務打成鏡像、(此處有2個服務、server、web服務)
2.1 創建Dockerfile文件、文件內容如下、(此處爲了方便,很多地方簡寫:如果是部署在
生產環境上,需要修改下日誌目錄,以及啓動方式) server dockerfile文件內容
FROM java:8
VOLUME /tmp
COPY resources/* resources/
ADD service-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
2.2 執行docker build -t 鏡像名字 . 命令進行構建鏡像、成功後使用docker images
查看自己的鏡像是否生成(注意鏡像名字後面有個空格和一個點. 表示當前目錄下)、
如果鏡像沒有生成需要重新執行構建,排查問題
2.3 創建web docker鏡像:同上 Dockerfile 文件內容如下:
FROM java:8
VOLUME /tmp
COPY resources/* resources/
ADD web-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
3、將server項目,和web項目部署到k8s裏面、使用環境變量連接外面數據源
3.1 執行命令 kubectl get node 查看節點是否正常(單節點如下:)
NAME STATUS AGE
127.0.0.1 Ready 6d
3.2 創建server、web項目的yaml文件、文件內容如下:
注意: 對於文件開頭apiVersion版本:內容與k8s版本相關:
1.6版本之前 apiVsersion:extensions/v1beta1
1.6版本到1.9版本之間:apps/v1beta1
1.9版本之後:apps/v1
具體詳情可參考:
k8s的apiversion版本
server.yaml 文件內容:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: server
labels:
app: server
spec:
replicas: 1
selector:
matchLabels:
app: server
template:
metadata:
labels:
app: server
spec:
containers:
- name: server
image: server //鏡像名字
imagePullPolicy: Never //表示從本地docker鏡像中獲取鏡像
ports:
- containerPort: 8087 //端口
env: //配置的環境變量
- name: ZOOKEEPER_HOST //zookeeper ip地址
value: '10.62.155.12'
- name: ZOOKEEPER_PORT //zookeeper 端口
value: '2181'
- name: REDIS_HOST //redis
value: '10.62.155.12'
- name: REDIS_PASSWORD //密碼
value: "123456"
- name: PGSQL_SERVICE_HOST
value: '10.62.55.12'
- name: PGSQL_SERVICE_PORT
value: "5432"
- name: PGSQL_PASSWORD
value: "123456"
- name: PGSQL_USERNAME
value: "postgres"
server-svc.yaml文件內容如下:
apiVersion: v1
kind: Service
metadata:
name: yty-server
namespace: default
labels:
app: server
spec:
type: NodePort
ports:
- port: 8087
nodePort: 30001 //映射到外部機器端口、默認範圍:30000-65535 可修改
selector:
app: server
web.yaml文件內容:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: web
labels:
app: web
spec:
replicas: 1
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: web
imagePullPolicy: Never
ports:
- containerPort: 80
env:
- name: ZOOKEEPER_HOST
value: '10.62.155.12'
- name: ZOOKEEPER_PORT
value: '2181'
web-svc.yaml 文件內容如下:
apiVersion: v1
kind: Service
metadata:
name: web
namespace: default
labels:
app: web
spec:
type: NodePort
ports:
- port: 80
nodePort: 30003
selector:
app: web
3.3、創建k8s pod服務
1、 執行命令:kubectl create server.yaml
kubectl create server-svc.yaml
kubectl create web.yaml
kubectl create web-svc.yaml
如果文件單獨分開放:比如server.yaml 文件和server-svc文件單獨放在一起,
可使用kubectl apply -f . 命令創建,注意後面有個. 表示當前目錄下:
當更新yaml文件內容時,也可以用kubectl apply -f .來更新Pod
2、 執行完創建命令後:執行kubectl get pods 查看pod情況
NAME READY STATUS RESTARTS AGE
server-1069855030-kshsf 1/1 Running 0 2d
web-3657954026-vf309 1/1 Running 0 2d
查看 pod項目日誌情況: kubectl logs -f server-1069855030-kshsf(pod名字)
3、如上:如果status 狀態爲running 則啓動正常。 然後在瀏覽器輸入id+映射端口 +
項目即可訪問
4、一些相關k8s命令
kubectl logs -f server-1069855030-kshsf(pod名字)
kubectl delete pod podName //刪除pod 刪除Pod的時候還必須刪除
// deployment 否則還會自動創建
kubectl get deployment //查看 deployment 情況
kubectl delete deployment deploymentName//刪除 deployment
kubectl describe pod server-1069855030-kshsf 查看pod情況
kubectl delete pod web-3657954026-j6tpq -n default --force --grace-period=0 //如果無法刪除pod,
可使用此強制刪除命令; 慎用
5 備註
對於使用環境變量中的ip地址:必須在k8s集羣機器地址和外部機器地址在同一個局域網中可訪問。
如果使用域名方式,必須搭建k8s集羣dns解析才能使用