k8s環境實現springcloud電商專案(一)之環境準備(Ingress-Mysql-harbor安裝)
- k8s環境實現springcloud電商專案(一)之環境準備(Ingress-Mysql-harbor安裝)
- 1. 環境準備
- 2. 實戰:使用 Harbor 搭建Docker 私有倉庫
- 3. 安裝和配置資料儲存倉庫 MySQL
k8s環境實現springcloud電商專案(一)之環境準備(Ingress-Mysql-harbor安裝)
基於 springcloud 的電商平臺功能圖
ingress及ingress controller的部署可參考上一篇文章
https://www.cnblogs.com/fengdejiyixx/p/16344502.html
1. 環境準備
準備安裝harbor 需要的實驗環境
新建立一臺虛擬機器安裝 harbor,配置如下:
主機名 ip 配置
harbor 192.168.7.51 4vCPU/4G 記憶體/60G 硬碟
1.1 修改 yum 源
選擇一種安裝 docker 的方式:1. 線上安裝 或 2. 離線安裝
1.線上安裝
配置 docker-ce 國內 yum 源(阿里雲)
[root@k8s-node1 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安裝軟體包
[root@k8s-node1 ~]# yum -y install wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate yum-utils device-mapper-persistent-data lvm2 telnet
1.2 配置防火牆
關閉 firewalld 防火牆, centos7 系統預設使用的是 firewalld 防火牆,停止 firewalld 防火牆,並禁用這個服務。
[root@k8s-node1 ~]# systemctl stop firewalld && systemctl disable firewalld
1.3 時間同步
[root@k8s-node1 ~]# ntpdate cn.pool.ntp.org編輯計劃任務,每小時做一次同步
1)
[root@k8s-node1 ~]# crontab -e
- */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org
2)重啟 crond 服務:
[root@k8s-node1 ~]# systemctl restart crond
1.4 關閉 selinux
關閉 selinux,設定永久關閉,這樣重啟機器 selinux 也處於關閉狀態可用下面方式修改:
[root@k8s-node1 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/'
/etc/sysconfig/selinux
[root@k8s-node1 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g'
/etc/selinux/config
上面檔案修改之後,需要重啟虛擬機器,如果測試環境可以用如下命令強制重啟:
[root@k8s-node1 ~]# reboot -f
注:生產環境不要 reboot -f,要正常關機重啟
檢視 selinux 是否修改成功
重啟之後登入到機器上用如下命令:
[root@k8s-node1 ~]# getenforce
顯示 Disabled 說明 selinux 已經處於關閉狀態
1.5 修改核心引數
[root@k8s-node1 ~]# modprobe br_netfilter
[root@k8s-node1 ~]# cat <
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
[root@k8s-node1 ~]# sysctl --system
注:sysctl --system 這個會載入所有的 sysctl 配置
修改主機名
在 192.168.7.51 上:
[root@k8s-node1 ~]# hostnamectl set-hostname harbor && bash
5.2.8配置 hosts 檔案
k8s-master1、k8s-node2、harbor 主機的 hosts 檔案保持一致,可按如下方法修改:在/etc/hosts 檔案增加如下幾行:
192.168.7.20k8s-master1
192.168.7.23k8s-node2
192.168.7.51 harbor
1.6 配置主機之間無密碼登陸
配置 k8s-master1 到 harbor 無密碼登陸在 k8s-master1 上操作
[root@k8s-master1 ~]# cd /root && ssh-copy-id -i .ssh/id_rsa.pub root@harbor1
#上面需要輸入 yes 之後,輸入密碼,輸入 harbor 物理機密碼即可
2. 實戰:使用 Harbor 搭建Docker 私有倉庫
Harbor 介紹
Docker 容器應用的開發和執行離不開可靠的映象管理,雖然 Docker 官方也提供了公共的映象倉庫,但是從安全和效率等方面考慮,部署我們私有環境內的 Registry 也是非常必要的。Harbor 是由
VMware 公司開源的企業級的 Docker Registry 管理專案,它包括許可權管理(RBAC)、LDAP、日誌稽核、管理介面、自我註冊、映象複製和中文支援等功能。
官網地址:https://github.com/goharbor/harbor
實驗環境:
harbor 機器需要的記憶體至少要 4G
2.1 為 Harbor 自簽發證書
[root@harbor ~]# mkdir /data/ssl -p && cd /data/ssl/
生成 ca 證書:
[root@harbor ssl]# openssl genrsa -out ca.key 3072
#生成一個 3072 位的 key,也就是私鑰
[root@harbor ssl]# openssl req -new -x509 -days 3650 -key ca.key -out ca.pem
#生成一個數字證書 ca.pem,3650 表示證書的有效時間是 10 年,按箭頭提示填寫即可,沒有箭頭標註的為空:
[root@harbor ssl]# openssl req -new -x509 -days 3650 -key ca.key -out ca.pem You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank
For some fields there will be a default value, If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:guangdong Locality Name (eg, city) [Default City]: shenzhen
Organization Name (eg, company) [Default Company Ltd]:xxxx Organizational Unit Name (eg, section) []:CA
Common Name (eg, your name or your server's hostname) []:harbor Email Address []:[email protected]
\#生成域名的證書:
[root@harbor ssl]# openssl genrsa -out harbor.key 3072
\#生成一個 3072 位的 key,也就是私鑰
[root@harbor ssl]# openssl req -new -key harbor.key -out harbor.csr
\#生成一個證書請求,一會簽發證書時需要的,標箭頭的按提示填寫,沒有箭頭標註的為空:
[root@harbor ssl]# openssl req -new -key harbor.key -out harbor.csr
You are about to be asked to enter information that will be incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank
For some fields there will be a default value, If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:guangdong Locality Name (eg, city) [Default City]: shenzhen
Organization Name (eg, company) [Default Company Ltd]:xxxx Organizational Unit Name (eg, section) []:CA
Common Name (eg, your name or your server's hostname) []:harbor Email Address []:[email protected]
Please enter the following 'extra' attributes to be sent with your certificate request
A challenge password []:
An optional company name []:
簽發證書:
[root@harbor ssl]# openssl x509 -req -in harbor.csr -CA ca.pem -CAkey ca.key - CAcreateserial -out harbor.pem -days 3650
![image](https://img2022.cnblogs.com/blog/1279547/202206/1279547-20220602161552214-636373560.png)
檢視證書是否有效:
openssl x509 -noout -text -in harbor.pem
顯示如下,說明有效:
2.2 安裝 Docker
安裝 docker
[root@harbor~]# yum install docker-ce -y
\#啟動 docker 服務
[root@harbor ~]# systemctl start docker && systemctl enable docker
配置映象加速器
[root@harbor~]# tee /etc/docker/daemon.json << 'EOF'
{
"registry-mirrors":["https://rsbud4vc.mirror.aliyuncs.com","https://registry.docker- cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub- mirror.c.163.com","http://qtid6917.mirror.aliyuncs.com","https://rncxm540.mirror.aliyuncs. com","https://e9yneuy4.mirror.aliyuncs.com"]
} EOF
重啟 docker 服務使配置生效
[root@harbor~]# systemctl daemon-reload && systemctl restart docker
#檢視 docker 狀態
[root@harbor ~]# systemctl status docker
建立安裝目錄
[root@harbor ssl]# mkdir /data/install -p [root@harbor ssl]# cd /data/install/
安裝 harbor
/data/ssl 目錄下有如下檔案:
ca.key ca.pem ca.srl harbor.csr harbor.key harbor.pem
2.3 安裝配置harbor
[root@harbor install]# cd /data/install/
#把 harbor 的離線包 harbor-offline-installer-v2.3.0-rc3.tgz 上傳到這個目錄
下載 harbor 離線包的地址:
https://github.com/goharbor/harbor/releases/tag/
解壓:
[root@harbor install]# tar zxvf harbor-offline-installer-v2.3.0-rc3.tgz
[root@harbor install]# cd harbor
[root@harbor harbor]# cp harbor.yml.tmpl harbor.yml
[root@harbor harbor]# vim harbor.yml
修改配置檔案:
hostname: harbor
#修改 hostname,跟上面簽發的證書域名保持一致
#協議用 https
certificate: /data/ssl/harbor.pem
private_key: /data/ssl/harbor.key
郵件和 ldap 不需要配置,在 harbor 的 web 介面可以配置其他配置採用預設即可
修改之後儲存退出
注:harbor 預設的賬號密碼:admin/Harbor12345
2.4 安裝 docker-compose
方法 1:離線上傳 docker-compose 到伺服器上
下載二進位制檔案上傳至此目錄
[root@harbor ~]# mv docker-compose-Linux-x86_64.64 /usr/local/bin/docker-compose
新增執行許可權
[root@harbor ~]# chmod +x /usr/local/bin/docker-compose
注: docker-compose 專案是 Docker 官方的開源專案,負責實現對 Docker 容器叢集的快速編排。Docker-Compose 的工程配置檔案預設為 docker-compose.yml,Docker-Compose 執行目錄下的必要有一個 docker-compose.yml。docker-compose 可以管理多個 docker 例項。
方法 2:線上安裝: [root@harbor ~]# curl -L
https://github.com/docker/compose/releases/download/1.26.2/docker-compose-`uname - s`-`uname -m` > /usr/local/bin/docker-compose
新增執行許可權
[root@harbor ~]# chmod +x /usr/local/bin/docker-compose
安裝 harbor 需要的離線映象包 docker-harbor-2-3-0.tar.gz,可上傳到 harbor,通過 docker load -i 解壓
[root@harbor install]# docker load -i docker-harbor-2-3-0.tar.gz
[root@harbor install]# cd /data/install/harbor
[root@harbor harbor]# ./install.sh
在自己電腦修改 hosts 檔案
在 hosts 檔案新增如下一行,然後儲存即可
192.168.7.51 harbor
擴充套件:
如何停掉 harbor:
[root@harbor harbor]# cd /data/install/harbor
[root@harbor harbor]# docker-compose stop
如何啟動 harbor:
[root@harbor harbor]# cd /data/install/harbor
[root@harbor harbor]# docker-compose start
如果 docker-compose start 啟動 harbor 之後,還是訪問不了,那就需要重啟虛擬機器
瀏覽器訪問harbor,
賬號:admin
密碼:Harbor12345
所有基礎映象都會放在 library 裡面,這是一個公開的映象倉庫
新建專案->起個專案名字 test(把訪問級別公開那個選中,讓專案才可以被公開使用)
2.5 在 k8s-master1 上測試使用 harbor 的 harbor 映象倉庫
#修改 docker 配置
[root@k8s-master1 ~]# vim /etc/docker/daemon.json
{
"registry-mirrors":["https://vh3bm52y.mirror.aliyuncs.com","https://registry.docker-
cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub- mirror.c.163.com"],
"exec-opts": ["native.cgroupdriver=systemd"], "insecure-registries":["192.168.7.51","harbor"]
}
![image](https://img2022.cnblogs.com/blog/1279547/202206/1279547-20220604143814539-80687132.png)
修改配置之後使配置生效:
[root@k8s-master1 ~]# systemctl daemon-reload && systemctl restart docker
檢視 docker 是否啟動成功
[root@k8s-master1 ~]# systemctl status docker
顯示如下,說明啟動成功:
Active: active (running) since Fri … ago
注意:
配置新增加了一行內容如下:
"insecure-registries":["192.168.7.51"],
上面增加的內容表示我們內網訪問 harbor 的時候走的是 http,192.168.7.51 是安裝 harbor 機器的 ip
登入 harbor:
[root@k8s-master1]# docker login 192.168.7.51
Username:admin
Password: Harbor12345
輸入賬號密碼之後看到如下,說明登入成功了:
Login Succeeded
#匯入 busybox 映象,busybox.tar.gz 在課件裡
[root@k8s-master1 ~]# docker load -i busybox.tar.gz
#把 tomcat 映象打標籤
[root@k8s-master1 ~]# docker tag busybox:latest 192.168.7.51/test/busybox:v1
[root@k8s-master1 ~]# docker push 192.168.7.51/test/busybox:v1
執行上面命令就會把 192.168.7.51/test/tomcat:v1 上傳到 harbor 裡的 test 專案下
2.5.1 從 harbor 倉庫上測試拉取映象
在 k8s-master1 機器上刪除映象
[root@k8s-master1 ~]# docker rmi -f 192.168.7.51/test/busybox:v1
拉取映象
[root@k8s-master1 ~]#docker pull 192.168.7.51/test/busybox:v1
3. 安裝和配置資料儲存倉庫 MySQL
3.1 MySQL 簡介
MySQL 是一款安全、跨平臺、高效的,並與 PHP、Java 等主流程式語言緊密結合的資料庫系統。該資料庫系統是由瑞典的 MySQL AB 公司開發、釋出並支援,由 MySQL 的初始開發人員 David
Axmark 和 Michael Monty Widenius 於 1995 年建立的。MySQL 的象徵符號是一隻名為 Sakila
的海豚,代表著 MySQL 資料庫的速度、能力、精確和優秀本質。
MySQL logo:
目前 MySQL 被廣泛地應用在 Internet 上的中小型網站中。由於其體積小、速度快、總體擁有成本低,尤其是開放原始碼這一特點,使得很多公司都採用 MySQL 資料庫以降低成本。
MySQL 資料庫可以稱得上是目前執行速度最快的 SQL 語言資料庫之一。除了具有許多其他資料庫所不具備的功能外,MySQL 資料庫還是一種完全免費的產品,使用者可以直接通過網路下載 MySQL 資料庫,而不必支付任何費用。
3.2 MySQL 特點
1)功能強大
MySQL 中提供了多種資料庫儲存引擎,各引擎各有所長,適用於不同的應用場合,使用者可以選擇最合適的引擎以得到最高效能,可以處理每天訪問量超過數億的高強度的搜尋 Web 站點。MySQL5 支援事務、檢視、儲存過程、觸發器等。
2)支援跨平臺
MySQL 支援至少 20 種以上的開發平臺,包括 Linux、Windows、FreeBSD 、IBMAIX、
AIX、FreeBSD 等。這使得在任何平臺下編寫的程式都可以進行移植,而不需要對程式做任何的修改。
3)執行速度快
高速是 MySQL 的顯著特性。在 MySQL 中,使用了極快的 B 樹磁碟表(MyISAM)和索引壓縮;通過使用優化的單掃描多連線,能夠極快地實現連線;SQL 函式使用高度優化的類庫實現,執行速度極快。
4)支援面向物件
PHP 支援混合程式設計方式。程式設計方式可分為純粹面向物件、純粹面向過程、面句物件與面向過程混合3 種方式。
5)安全性高
靈活和安全的許可權與密碼系統,允許基本主機的驗證。連線到伺服器時,所有的密碼傳輸均採用加密形式,從而保證了密碼的安全。
6)成本低
MySQL 資料庫是一種完全免費的產品,使用者可以直接通過網路下載。
7)支援各種開發語言
MySQL 為各種流行的程式設計語言提供支援,為它們提供了很多的 API 函式,包括 PHP、ASP.NET、Java、Eiffel、Python、Ruby、Tcl、C、C++、Perl 語言等。
8)資料庫儲存容量大
MySQL 資料庫的最大有效表尺寸通常是由作業系統對檔案大小的限制決定的,而不是由 MySQL內部限制決定的。InnoDB 儲存引擎將 InnoDB 表儲存在一個表空間內,該表空間可由數個檔案建立,表空間的最大容量為 64TB,可以輕鬆處理擁有上千萬條記錄的大型資料庫。
9)支援強大的內建函式
PHP 中提供了大量內建函式,幾乎涵蓋了 Web 應用開發中的所有功能。它內建了資料庫連線、檔案上傳等功能,MySQL 支援大量的擴充套件庫,如 MySQLi 等,可以為快速開發 Web 應用提供便利。
3.3 安裝 MySQL
用 k8s-master1 機器複用即可:在 k8s-master1 上操作:
[root@k8s-master1 ~]# yum install mysql* mariadb* -y
啟動 MySQL
[root@k8s-master1 ~]# systemctl start mariadb.service
mysql 安裝成功後,預設的 root 使用者密碼為空,你可以使用以下命令來建立 root 使用者的密碼,密碼設定成 111111
[root@k8s-master1 ~]# mysqladmin -u root password "111111"
登陸資料庫
[root@k8s-master1 ~]# mysql -uroot -p111111
建立資料庫 tb_order、tb_product、tb_stock
mysql> create database tb_product;
mysql> create database tb_stock;
mysql> create database tb_order;
3.4 在 Mysql 資料庫匯入資料
把準備好的相應的 sql 語句上傳到 mysql 機器的 root 目錄下,sql 檔案分別是 order.sql、product.sql、 stock.sql,按如下順序匯入:
mysql> use tb_order
mysql> source /root/k8s/springcloud/order.sql
mysql> use tb_stock
mysql> source /root/k8s/springcloud/stock.sql
mysql> use tb_product
mysql> source /root/k8s/springcloud/product.sql
3.5 對 MySQL 資料庫授權
mysql> grant all on *.* to 'root'@'10.244.%.%' identified by '111111';
mysql> grant all on *.* to 'root'@'192.168.%.%' identified by '111111';
mysql> grant all on *.* to 'root'@'%' identified by '111111';
mysql> flush privileges;
mysql> exit
3.5.1 驗證資料庫匯入資料是否正確
[root@k8s-master1 ~]# mysql -uroot -p111111
mysql> use tb_stock
mysql> select * from stock;
+----+---------+-------------+------------+
| id | prod_id | sales_stock | real_stock |
+----+---------+-------------+------------+
| 1 | 1 | 99 | 99 |
| 2 | 2 | 88 | 88 |
| 3 | 3 | 77 | 77 |
| 4 | 4 | 66 | 66 |
+----+---------+-------------+------------+
4 rows in set (0.01 sec)
mysql> use tb_product
Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from product;
+----+-----------------+----------+
| id | product_name | price |
+----+-----------------+----------+
| 1 | 手機 | 99.990 |
| 2 | 大彩電 | 999.000 |
| 3 | 洗衣機 | 100.000 |
| 4 | 超級大冰箱 | 9999.000 |
+----+-----------------+----------+
4 rows in set (0.01 sec)
mysql> use tb_order
Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A
mysql> select * from orders; Empty set (0.00 sec)
到此我們的基礎環境都已經配置好了,後面開始搭建電商平臺