一。准備環境
1.1 拉去gitlab代碼 關於gitlab安裝可以查看我以前博文
https://www.cnblogs.com/zhaobin-diray/p/13221556.html
mkdir /root/gitlab/
cd /root/gitlab/
git clone http://172.17.17.84:85/java/java.git #克隆代碼
1.2 harbor鏡像倉庫搭建可以查看我以前博文
新建項目demon----
https://www.cnblogs.com/zhaobin-diray/p/13554765.html
docker login reg.ctnrs.com
賬號 admin
密碼 harbor12345
docker push reg.ctnrs.com/demo/java-demon:v1 #推送打好的tag鏡像
1.3 代碼編譯,需要安裝jdk.maven環境
yum install java-1.8.0-openjdk maven -y
14.修改國內mav源
vim /etc/maven/settings.xml 添加到 </mirrors> 上面
<mirror> <id>central</id> <mirrorOf>central</mirrorOf> <name>aliyun maven</name> <url>https://maven.aliyun.com/repository/public</url> </mirror>
1.5執行編譯 在java項目里 執行構建
mvn clean package -D maven.test.skip=true
編譯完成后當前目錄多了target目錄
docker build -t reg.ctnrs.com/demo/java-demon:v1 . 做鏡像並且把鏡像傳到demon項目里
二。k8s編排部署項目
2.1創建命名空間
kubectl create ns test
為了防止每次登陸harbor可以創建secret來保存harbor賬號密碼,k8s里面調用方便,-n是指定給哪個命名空間所用
kubectl create secret docker-registry docker-regsitry-auth --docker-username=admin --docker-password=Harbor12345 --docker-server=reg.ctnrs.com -n test
2.2 使用deployment來部署項目
kubectl apply -f deployment.yaml

apiVersion: apps/v1 kind: Deployment metadata: name: java-demo namespace: test spec: replicas: 3 selector: matchLabels: project: www app: java-demo template: metadata: labels: project: www app: java-demo spec: imagePullSecrets: - name: "docker-regsitry-auth" containers: - image: reg.ctnrs.com/demo/java-demon:v1 name: java-demo imagePullPolicy: Always ports: - containerPort: 8080 name: web protocol: TCP resources: requests: cpu: 0.5 memory: 1.8Gi limits: cpu: 2 memory: 3Gi livenessProbe: httpGet: path: / port: 8080 initialDelaySeconds: 60 timeoutSeconds: 20 readinessProbe: httpGet: path: / port: 8080 initialDelaySeconds: 60 timeoutSeconds: 20
kubectl apply -f service.yaml

apiVersion: v1 kind: Service metadata: labels: app: java-demo name: java-demo namespace: test spec: ports: - port: 80 protocol: TCP targetPort: 8080 nodePort: 30018 selector: project: www app: java-demo type: NodePort
kubectl get svc -n test
kubectl get ep -n test
網頁訪問 就可以了 http://172.17.17.85:30018/
2.3 使用ingress來暴露項目
kubectl apply -f ingress-controller.yaml 需要有ingress-controller的支持
kubectl apply -f .

apiVersion: extensions/v1beta1 kind: Ingress metadata: name: java-demo namespace: test spec: rules: - host: java.ctnrs.com http: paths: - path: / backend: serviceName: java-demo servicePort: 80
2.4 創建mysql數據庫-用helm
helm install java-demon-db --set persistence.storageClass="managed-nfs-storage" azure/mysql
kubectl cp db/tables_ly_tomcat.sql java-demon-db-mysql-dc4bcf7fd-df42g:/ #copy數據表
kubectl exec -it java-demon-db-mysql-dc4bcf7fd-df42g bash #進入mysql容器
mysql -uroot -p$MYSQL_ROOT_PASSWORD 可以直接進入mysql
create databases java;
use java;
source /tables_ly_tomcat.sql;
grant all on java.* to 'root'@'%' identifiel by 'yuPML5qCdK';

CREATE TABLE `user` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(100) NOT NULL COMMENT '名字', `age` INT(3) NOT NULL COMMENT '年齡', `sex` CHAR(1) DEFAULT NULL COMMENT '性別', PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8;
vim src/main/resources/application.yml
url: jdbc:mysql://java-demon-db-mysql.default:3306/java?characterEncoding=utf-8 username: root password: yuPML5qCdK
[root@k8s-master java]# mvn clean package -D maven.test.skip=true
[root@k8s-master k8s-yaml]# docker build -t reg.ctnrs.com/demo/java-demon:v2 .
[root@k8s-master k8s-yaml]# vim deployment.yaml #修改為新鏡像
- image: reg.ctnrs.com/demo/java-demon:v2
[root@k8s-master java]# kubectl apply -f .
重新訪問即可
三。 上傳PHP-demon
[root@k8s-master k8s-yaml]# helm install php-demon-db --set persistence.storageClass="managed-nfs-storage" azure/mysql -n test
[root@k8s-master k8s-yaml]# MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default php-demon-db-mysql -o jsonpath="{.data.mysql-root-password}" | base64 --decode; echo)
[root@k8s-master php-demo]# echo $MYSQL_ROOT_PASSWORD #qOaSMpDX4v打印出來的密碼 根據實際去填寫一會
[root@k8s-master php-demo]# vim wp-config.php
define('DB_NAME', 'wp'); /** MySQL數據庫用戶名 */ define('DB_USER', 'root'); /** MySQL數據庫密碼 */ define('DB_PASSWORD', 'qOaSMpDX4v'); /** MySQL主機 */ define('DB_HOST', 'php-demon-db-mysql.default');
[root@k8s-master php-demo]# docker build -t reg.ctnrs.com/demo/php-demo:v1 . #打tag
[root@k8s-master php-demo]# docker push reg.ctnrs.com/demo/php-demo:v1
[root@k8s-master k8s-yaml]# kubectl get secret -n test 查看設置的變量docker-regsitry-auth
[root@k8s-master k8s-yaml]# vim deployment.yaml 修改下面2項
- name: docker-regsitry-auth
containers:
- name: nginx
image: reg.ctnrs.com/demo/php-demo:v1
[root@k8s-master k8s-yaml]# kubectl apply -f .
[root@k8s-master k8s-yaml]# kubectl exec -it php-demon-db-mysql-76bd66ff4d-nmglm bash 對面的是數據庫的名字
root@php-demon-db-mysql-76bd66ff4d-nmglm:/# mysql -uroot -p$MYSQL_ROOT_PASSWORD
mysql> create databases wp;
頁面訪問 http://172.17.17.85:32144/