Kubernetes プロジェクトのデプロイメント

目次

 1. コンテナ配送の流れ

2. k8s プラットフォーム導入プロジェクトのプロセス

3. K8s プラットフォームにプロジェクトをデプロイします


1. コンテナ配送の流れ


コンテナ配信プロセスは通常、開発段階、継続的統合段階、アプリケーション展開段階、運用および保守段階の 4 つの段階に分かれています。

開発フェーズ:アプリケーションの開発、Dockerfile の作成。

継続的統合フェーズ:アプリケーションをコンパイルしてパッケージ化し、Dockerfile を使用してイメージを構築し、イメージをミラー ウェアハウスにプッシュします。

アプリケーションのデプロイ段階:イメージに基づいてポッドを作成し、デプロイ コントローラーを使用してサービスを公開し、サービスを取得し、イングレスを使用してドメイン名アクセス サービスを提供します。

運用・保守段階:アプリケーション等の監視やバージョンアップ。


2. k8s プラットフォーム導入プロジェクトのプロセス


1. ミラーイメージを作成します (Dockerfile 経由)

2. ミラー倉庫(Aliyun Mirror、Netease Mirror)にプッシュします。

3. コントローラー導入イメージ(Deployment)

4. 外部公開アプリケーション (サービス、Ingress)

5. 運用保守(監視、更新)


3. K8s プラットフォームにプロジェクトをデプロイします


導入環境の準備

#  可以使用 yum 在线 或离线的下载 安装
yum install java-1.8.0-openjdk maven git -y 

Maven プロジェクトのコンパイル

# 代码编译构建
cd  /opt/tomcat-java-demo-master
mvn clean package -Dmaven.test.skip=true 

コンパイルされた WAR パッケージ

最初のステップ: 鏡像を作成する

cd  /opt/tomcat-java-demo-master
unzip   target/ly-simple-tomcat-0.0.1-SNAPSHOT.war -d  target/ROOT

## Dockerfile
FROM lizhenliang/tomcat 
LABEL maintainer www.ctnrs.com
RUN rm -rf /usr/local/tomcat/webapps/*
ADD target/ROOT /usr/local/tomcat/webapps/ROOT 

## 镜像构建
docker build  -f Dockerfile -t java-demo .


## 在项目中标记镜像
docker tag java-demo  harbor.winneryun.com/demo/java-demo:v1
## 推送镜像到当前项目 docker配置可信任 且登录成功
docker push  harbor.winneryun.com/demo/java-demo:v1

鏡の倉庫に押し込む

プロジェクトデモのアドレス:

# 项目地址
https://github.com/lizhenliang/tomcat-java-demo

ステップ 2: コントローラーを使用してイメージを展開する

信頼できる各ノードを構成します。 ノード (ウェアハウスが HTTPS によってアクセスされる場合、構成は必要ありません)

[root@k8s-master java-demo]# cat /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
  "insecure-registries": ["harbor.winneryun.com"]
}

ミラー ウェアハウスの認証資格情報を K8s Secret に保存します。

kubectl create secret docker-registry registry-auth --docker-username=admin --docker-password=Harbor12345 --docker-server=harbor.winneryun.com

configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: java-demo-config
data:
    application.yml: |
        server:
          port: 8080
        spring:
          datasource:
            url: jdbc:mysql://localhost:3306/test?characterEncoding=utf-8
            username: root
            password: 123456789
            driver-class-name: com.mysql.jdbc.Driver
          freemarker:
            allow-request-override: false
            cache: true
            check-template-location: true
            charset: UTF-8
            content-type: text/html; charset=utf-8
            expose-request-attributes: false
            expose-session-attributes: false
            expose-spring-macro-helpers: false
            suffix: .ftl
            template-loader-path:
              - classpath:/templates/

デプロイメント.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: java-demo
spec:
  replicas: 2
  selector:
    matchLabels:
      project: www
      app: java-demo
  template:
    metadata:
      labels:
        project: www
        app: java-demo
    spec:
      imagePullSecrets:
      - name: registry-auth
      containers:
      - image: harbor.winneryun.com/demo/java-demo:v1
        name: java-demo
        volumeMounts:  ## configMap 挂载
        - name: config
          mountPath: "/usr/local/tomcat/webapps/ROOT/WEB-INF/classes/application.yml"
          subPath: application.yml
        resources:
          requests:
            cpu: 0.5
            memory: 500Mi
          limits: 
            cpu: 1
            memory: 1Gi
        livenessProbe:
          httpGet:
            path: /
            port: 8080
          initialDelaySeconds: 50
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /
            port: 8080
          initialDelaySeconds: 50
          periodSeconds: 10
      volumes:
      - name: config
        configMap:
          name: java-demo-config
          items:
          - key: "application.yml"
            path: "application.yml"

ステップ 3: アプリケーションを外部に公開する

サービス.yaml

apiVersion: v1
kind: Service
metadata:
  name: java-demo 
spec:
  selector:
    project: www
    app: java-demo
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080 

ingress.yaml

apiVersion: networking.k8s.io/v1 
kind: Ingress
metadata: 
  name: java-demo
spec:
  rules:
  - host: example.ctnrs.com 
    http:
      paths:
      - path: / 
        pathType: Prefix 
        backend: 
          service:
            name: java-demo
            port: 
              number: 80

デプロイされたサービスを表示する

アクセスアドレス: http: //example.ctnrs.com/

ステップ 4: パブリック ネットワーク ロード バランサを追加する

nginxをインストールし、nginx.confを設定する

yum install epel-release -y
yum install nginx  -y
systemctl start nginx

vim /etc/nginx/nginx.conf
#在server 的上面插入以下代码
    upstream webservers {
        server 192.168.2.118:80;
        server 192.168.2.210:80;
   }
    server{
        listen 80;
        server_name example.ctnrs.com; 
        location / {
          proxy_pass http://java-demo; proxy_set_header Host $Host;
        }
   }
    server {
        listen       80 default_server;
        listen       [::]:80 default_server;  
.....

nginx -s reload

アクセス成功:

おすすめ

転載: blog.csdn.net/qq_35995514/article/details/130475256