111111

k8s-部署java+php业务网站项目案例+ELK Stack收集K8S平台日志+Prometheus全方位监控K8

 

 

 

一。准备环境

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> 上面

1
2
3
4
5
6
<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是指定给哪个命名空间所用

1
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
deployment.yaml
复制代码

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
service.yaml
复制代码

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
ingress
复制代码

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

1
2
3
4
url: jdbc:mysql://java-demon-db-mysql.default:3306/java?characterEncoding=utf-8
 
username: root
password: yuPML5qCdK<br>

[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

1
2
3
4
5
6
7
8
9
10
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/

 

posted @   赵SIR  阅读(853)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示