業務上云--從Container+BuildKitd打鏡像到在Kubernetes上部署LNMP

?一、背景

在基于kubeasz部署kubernetes高可用集群-CSDN博客文章部署的kubernetes集群上部署LNMP

1.1、Kubernetes環境
?1.2、Harbor環境

【docker基礎】使用Harbor搭建私有倉庫-docker-compose使用示例--第二周作業_harbor docker-compose-CSDN博客

Harbor環境升級:

  1. 上面文章中提到的harbor,在harbor.yml中域名的位置可以配置成IP地址,這樣兩臺Harbor使用IP實現互相復制、互相備份;
  2. 前端haproxy+keepalived反向代理兩臺Harbor機器,實現harbor高可用
  3. 在阿里云上申請域名解析到keepalived的VIP上,并申請免費ssl證書;
  4. 將ssl證書文件放到harbor所在的機器上,在harbor.yml文件中配置ssl證書;
1.3、安裝配置buildkitd

參考文章:https://www.cnblogs.com/punchlinux/p/16575328.html

buildkitd(服務端),目前支持runc和containerd作為鏡像構建環境,默認是runc,可以更換containerd。

buildctl(客戶端),負責解析Dockerfile文件、并向服務端buildkitd發出構建請求。

GitHub地址:https://github.com/moby/buildkit/releases

二、構建nginx、php-fpm鏡像

2.1、構建nginx鏡像
2.1.1、準備nginx鏡像需要的文件

2.1.2、編寫nginx鏡像的Dockerfile
FROM harbor.jnlikai.cc/library/centos:8.4      #基礎鏡像可以提前下載并上傳到自己的harbor上
MAINTAINER "JNLIKAI"
RUN rm -fr /etc/yum.repos.d/*                  #添加需要的repo文件
ADD Centos-8.repo /etc/yum.repos.d/
ADD epel.repo /etc/yum.repos.d/
RUN yum install -y vim wget tree make lrzsz zlib zlib-devel gcc-c++ automake pcre pcre-devel libtool openssl openssl-devel iproute net-tools iotop   #安裝nginx需要的包
ADD nginx-1.26.0.tar.gz /usr/local/src/                       #將nginx源碼包添加到鏡像的指定目錄
RUN cd /usr/local/src/nginx-1.26.0 && ./configure --prefix=/apps/nginx --with-http_sub_module && make && make install && ln -sv /apps/nginx/sbin/nginx /usr/sbin/nginx && rm -fr /usr/local/src/nginx-1.26.0.tar.gz                     #源碼安裝nginx
RUN useradd nginx -u 2024                                     #創建nginx用戶
ADD nginx.conf /apps/nginx/conf/nginx.conf                    #將修改好的配置文件打到鏡像
RUN mkdir -p /data/nginx/html                                 #創建數據目錄
EXPOSE 80 443                                                 #暴露端口
CMD ["/apps/nginx/sbin/nginx","-c","/apps/nginx/conf/nginx.conf","-g","daemon off;"]     #運行nginx進程
2.1.3、使用nerdctl+buildkitd打鏡像

檢查buildkitd服務是否正常運行:

使用nerdctl構建nginx鏡像,并上傳harbor

2.2、構建php鏡像
2.2.1、準備php需要的文件

2.2.2、編寫php的Dockerfile
FROM harbor.jnlikai.cc/library/centos:8.4
MAINTAINER "JNLIKAI"
RUN useradd nginx -u 2024                            #創建運行php的用戶nginx
RUN rm -fr /etc/yum.repos.d/*
ADD Centos-8.repo /etc/yum.repos.d/Centos-8.repo
ADD epel.repo /etc/yum.repos.d/epel.repo
ADD RPM-GPG-KEY-EPEL-8 /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8
RUN yum -y install https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-8.rpm
RUN yum -y install php83-php-fpm php83-php-mysql         #yum安裝php相關包ADD www.conf /etc/opt/remi/php83/php-fpm.d/www.conf      #將修改后的配置文件打到鏡像里
ADD run_php.sh /usr/local/bin/run_php.sh                 #運行php的腳本
RUN chmod +x /usr/local/bin/run_php.sh
EXPOSE 9000
CMD ["/usr/local/bin/run_php.sh"]                        #運行腳本
www.conf是php的配置文件,修改的內容:
user = nginx
group = nginx
listen = 127.0.0.1:9000
listen.owner = nginx
listen.group = nginx
run_php.sh腳本內容

2.2.3、構建php鏡像,并上傳harbor

三、使用deployment部署wordpress

3.1、編寫deployment的yaml文件
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: wordpress-deploymentname: wordpress-deploymentnamespace: myserver
spec:replicas: 3selector:matchLabels:app: wordpresstemplate:metadata:labels:app: wordpressspec:containers:- name: wordpress-nginximage: harbor.jnlikai.cc/library/nginx:v1.26.0        #使用自己構建的nginx鏡像imagePullPolicy: Alwaysports:- containerPort: 80protocol: TCPname: http- containerPort: 443protocol: TCPname: httpsvolumeMounts:- name: wordpress                                    #掛載數據目錄mountPath: /data/www/htmlreadOnly: false- name: nginx-configmap                              #使用configmap掛載配置文件mountPath: /apps/nginx/conf/nginx.confsubPath: nginx.conf- name: wordpress-phpimage: harbor.jnlikai.cc/library/php-fpm:8.3.7       #使用自己構建的php鏡像imagePullPolicy: Alwaysports:- name: httpprotocol: TCPcontainerPort: 9000volumeMounts:- name: wordpress                                   #掛載數據目錄mountPath: /data/www/htmlreadOnly: falsevolumes:- name: wordpress                                     #定義數據卷的后臺存儲(也可以使用pvc)nfs:server: 10.49.33.147path: /data/wordpress- name: nginx-configmap                               #引用configmap里的定義的配置文件configMap:name: nginxitems:- key: nginx.confpath: nginx.conf
---
apiVersion: v1
kind: Service
metadata:labels:app: wordpressname: wordpress-servicenamespace: myserver
spec:type: NodePort                                          #定義nodeport類型的serviceports:- name: httpport: 80protocol: TCPtargetPort: 80nodePort: 30080- name: httpsport: 443protocol: TCPtargetPort: 443nodePort: 31443selector:app: wordpress
數據卷寫的數nfs提供,需要在nfs-server上創建目錄/data/wordpress,并將該目錄的屬主數組改成2024(nginx的UID)

3.2、編寫配置文件的configmap

在部署調試或業務變更時,需要經常修改nginx的配置文件,所以經nginx的配置文件寫到configmap里,這樣通過修改configmap就可以達到修改配置文件的目的,不用重新打鏡像;

[root@k8s-master1 wordpress]# cat nginx-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: nginxnamespace: myserverlabels:app: nginx
data:nginx.conf: |user  nginx;worker_processes  1;events {worker_connections  1024;}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen       80;server_name  localhost;location / {root   /data/www/html;index  index.php index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}location ~ \.php$ {root           /data/www/html;fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;include        fastcgi_params;}}}
3.3、創建configmap,部署wordpress-deployment

四、訪問WordPress頁面,完成安裝

4.1、使用節點的30080端口即可訪問wordpress站點,默認是安裝頁面

????????

4.2、創建數據庫

數據庫使用基于StatefulSet控制器在Kubernetes上部署MySQL一主多從-CSDN博客文章部署的數據庫集群

4.2.1、首先登陸mysql-0容器,創建wordpress數據庫

4.2.2、創建用戶,并授權

4.2.3、在安裝頁面上填寫數據庫信息

Database Host的位置填寫mysql-0的FQDN

4.2.4、完成安裝

五、其他補充

5.1、WordPress的數據目錄

wordpress的數據目錄在wordpress/wp-content/uploads,這個目錄下按時間保存站點的附件文件,可以該目錄設置持久化存儲(PV/PVC),備份附件可以備份該目錄

5.2、服務暴露

可以使用ingress、openelb等將服務暴露出去

5.3、對站點進行壓測

測試穩定性、或者結合HPA測試自動伸縮

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/12433.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/12433.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/12433.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第 5 篇 : 多節點Netty服務端(可擴展)

說明 前面消息互發以及廣播都是單機就可以完成測試, 但實際場景中客戶端的連接數量很大, 那就需要有一定數量的服務端去支撐, 所以準備虛擬機測試。 1. 虛擬機準備 1.1 準備1個1核1G的虛擬機(160), 配置java環境, 安裝redis和minio 1.2 準備6個1核1G的空虛擬機(161到166), …

Elasticsearch的使用

Elasticsearch 1、認識和安裝 Elasticsearch的官方網站如下: https://www.elastic.co/cn/elasticsearch Elasticsearch是由elastic公司開發的一套搜索引擎技術,它是elastic技術棧中的一部分。完整的技術棧包括: Elasticsearch&#xff1…

MySQL變量的定義與使用(二)

一、通過變量進行實際的操作 set cityNameRotterdam; SELECT * from city where Name cityName; 二、變量只能處理字符,并不能代替符號或者關鍵字進行使用 set cityName1Rotterdam; set cityName2Zaanstad; set cityName3Zwolle; SELECT * from city where Name…

2024CCPC全國邀請賽(鄭州)暨河南省賽

2024CCPC全國邀請賽(鄭州站)暨河南省賽 一銅一銀,雖不是線下第一次參賽但是第一次拿xcpc獎牌,還有個國賽獎真是不戳。感謝學長,感謝隊友! 雖然遺憾沒有沖到省賽金,不過還有icpc商丘&#xff08…

SpringBoot項目中使用Redis,Mybatis和JWT

在Spring Boot項目中,結合Redis,MyBatis和JWT的使用可以提供以下功能: Redis的作用: 1.緩存:Redis可以用作緩存存儲,提高應用程序的性能和響應速度。特別是對于頻繁讀取但不經常更新的數據,如配…

Milvus Cloud:打造向量數據庫的Airtable級體驗

向量數據庫Milvus Cloud是一種用于處理和存儲向量數據的數據庫,它通常用于機器學習、圖像和視頻檢索、自然語言處理等領域。要將其升級為類似Airtable那樣易用且一體化的系統,需要考慮以下幾個關鍵方面: 1. 用戶界面(UI)設計 Airtable之所以用戶友好,很大程度上歸功于其直…

整型進制轉換

整型常量的不同進制表示 計算機中只能存儲二進制數,即0和1,而在對應的物理硬件上則是高,低電平。為了更方便地觀察內存中的二進制情況,除我們正常使用的十進制數外,計算機還提供了十六進制數和八進制數。 下面介紹不…

類圖及類的關系

類圖(Class Diagram)是UML(Unified Modeling Language,統一建模語言)中的一種圖,用于描述系統中類的靜態結構,包括類的屬性、方法以及類之間的關系。 一、類 類(Class)…

海外倉混合訂單揀貨策略:人工與海外倉系統的最佳搭配模式

根據訂單高效揀貨是任何海外倉都要面對的問題。只有當訂單可以被高效,準確的揀貨之后,才能繼續走下面的物流流程,所以盡可能的縮短揀貨時間,提升揀貨精準度,才是提升訂單交付率的最佳方法。 海外倉企業都在不斷尋找&am…

Vue如何引入公用方法

文章目錄 1. 在全局范圍內引入2. 在單文件組件中引入3. 使用Vuex或Vue Composition API4. 使用mixins5. 使用插件 1. 在全局范圍內引入 在你的main.js或main.ts文件中引入并注冊你的公用方法,使得它們可以在整個Vue應用中使用。 // 引入你的公用方法文件 import {…

Android動態布局framelayout

功能說明 最近碰到一個需求,要求在網頁端拖控件,動態配置app控件的模塊,大小和位置,顯示不同的功能,然后在app大屏展示。 技術難點: 1.動態控件位置和大小難調,會出現布局混亂,位置錯…

129.哈希表:有效的字母異位詞(力扣)

242. 有效的字母異位詞 - 力扣(LeetCode) 題目描述 代碼解決以及思路 這個方法的時間復雜度為O(N),其中N是字符串的長度,空間復雜度為O(1)(因為輔助數組的大小是固定的26)。 class Solution { public:bo…

python通過ctypes調用C/C++ SDK,當SDK異常時,同時打印C/C++/Python的棧信息

python通過ctypes調用C/C SDK,當SDK異常時,同時打印C/C/Python的棧信息 一.復現步驟二.輸出 本文演示了python通過ctypes調用C/C SDK,當SDK異常時,同時打印C/C/Python的棧信息.基于traceback、addr2line、PyErr_SetString、backtrace_symbols 一.復現步驟 cat > print_bac…

自媒體的發展趨勢:從個人表達到全球話語權

一、引言隨著數字技術的快速發展,信息傳播的方式和格局也在不斷變化。自媒體,作為其中的一股重要力量,正在以它的獨特方式改變著全球的信息傳播和社會發展。本文將從自媒體的定義及發展歷程入手,深入探討自媒體未來的發展趨勢&…

感知局部規劃--似然場局部規劃

系列文章目錄 提示:這里可以添加系列文章的所有文章的目錄,目錄需要自己手動添加 TODO:寫完再整理 文章目錄 系列文章目錄前言感知導航感知似然場局部規劃(很像DWA但是不依賴地圖,完全依賴感知) 前言 認知有限&#x…

Uniapp開發入門:構建跨平臺應用的全面指南

引言 什么是Uniapp Uniapp是一款由DCloud公司推出的基于Vue.js的跨平臺應用開發框架。它的核心理念是“一套代碼,多端運行”,開發者只需編寫一份代碼,即可生成包括iOS、Android、H5、微信小程序、支付寶小程序、百度小程序等多平臺的應用。…

初識C++ · string的使用(2)

目錄 1 Modifiers部分 1.1 assign的使用 1.2 insert的使用 1.3 erase的使用 1.4 replace的使用 2 capacity部分 2.1 max_size的使用 2.2 capacity的使用 2.3 reserve的使用 2.4 shrink_to_fit簡介 2.5 resize的使用 2.6 clear的使用 3 String operations部分 3.1 …

[數據結構1.0]快速排序

最近學習了快速排序,鼠鼠俺來做筆記了! 本篇博客用排升序為例介紹快速排序! 1.快速排序 快速排序是Hoare于1962年提出的一種二叉樹結構的交換排序方法,其基本思想為:任取待排序元素序列中的某元素作為基準值&#x…

202103青少年軟件編程(Python)等級考試試卷(一級)

一、單選題(共25題,每題2分,共50分) 下列哪個操作不能退出IDLE環境?( ) A、AltF4 B、CtrlQ C、按ESC鍵 D、exit() 試題編號:20210124-yfj-003 題型:單選題 答案&#xf…

Java面試八股之一個char類型變量能不能存儲一個中文字符

Java中一個char類型變量能不能存儲一個中文字符?為什么? Java中一個char類型變量可以存儲一個中文字符。原因如下: Unicode編碼支持:Java語言采用Unicode字符集作為其內建字符編碼方式。Unicode是一種廣泛接受的字符編碼標準&am…