这是一篇写的很早的文章,所以有个别内容没那么新,涵盖的内容非常的全,内容太多,可以用于参考。

主要流程分为:

  1. Rancher PaaS 平台
  2. MySQL 安装、配置、数据导入
  3. RabbitMQ 安装、配置
  4. 镜像(Harbor、ACR、SWR)服务
  5. 服务部署、调试

一、Rancher PaaS 平台搭建

主要参考:

  • Rancher HA 高可用安装步骤
  • Kubernetes 最新版本安装过程和注意事项

搭建过程分为以下几个主要步骤:

  1. Docker 安装配置
  2. kubectl 下载安装
  3. rke 下载安装
  4. helm3 下载安装
  5. ssh-key 和各个节点配置
  6. rke 配置集群
  7. helm 安装 Rancher
  8. Rancher 配置

1.1. Docker 安装配置

1.1.1 防火墙配置

禁用防火墙

systemctl disable firewalld

关闭防火墙

systemctl stop firewalld

禁用 SELinux,目的是让容器可以读取主机文件系统

setenforce 0

配置禁用 SELinux

vi /etc/sysconfig/selinux

修改 SELINUX 为 disabled

SELINUX=disabled
#SELINUX=enforcing

禁用 swap 分区

#禁用当前的 swap
sudo swapoff -a
#同时永久禁掉swap分区,打开如下文件注释掉swap那一行
sudo vi /etc/fstab

1.1.2 安装 Docker

在 阿里巴巴开源镜像站 搜 docker-ce,帮助中给了一个地址:

https://yq.aliyun.com/articles/110806

使用官方安装脚本自动安装 (仅适用于公网环境)

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

安装完成后先别着急设置 docker 自动启动和启动服务。

预先设置 VERSION 环境变量可以指定版本前缀,例如 VERSION=18.06 将下载 18.06.* 的最新版本。

1.1.3 配置 Docker

首先需要配置镜像,其次需要修改 docker 默认存放镜像和容器的位置。

挂载磁盘,参考: Linux 不重启(动态)挂载磁盘以及简单的数据迁移

一般购买服务器的时候会挂载一个100G以上的硬盘,需要先对硬盘进行格式化和挂载配置,然后修改 docker 配置为该挂载的路径。下面是磁盘的相关操作步骤。

  1. 通过 fdisk -l 查看系统挂载的磁盘,阿里云中通常第二个磁盘为 /dev/vdb,如果磁盘没有分区和格式化,先进行第 2 步操作。

  2. 对磁盘分区,执行 fdisk /dev/vdb 进入配置后,输入 n,后续提示全部使用默认设置,最后输入 w 写入配置进行保存。

  3. 格式化磁盘,使用 mkfs.ext4 /dev/vdb1 进行格式化。

  4. 挂载目录,Rancher有些功能需要 docker 使用 /var/lib/docker 目录,因此不去改这个路径,直接使用命令 mount /dev/vdb1 /var/lib/docker 挂载到该目录,这种方式重启后会失效,还需继续下一步配置。

  5. 开机挂载配置,输入命令编辑配置文件 vi /etc/fstab,在最后一行添加如下配置:

    /dev/vdb1 /var/lib/docker ext4 defaults 0 0

    手工和上面的配置对齐好看就行。配置完成后使用 mount -a 进行测试(挂载出错会导致无法进入Linux系统)

配置好docker 后,可以设置开机启动和启动服务了。

# 开机启动
systemctl enable docker
# 启动服务
systemctl start docker

Ansible Playbooke 安装 Docker 全过程

- name: install dockerhosts: dockervars:shell_url: https://get.docker.comtasks:- name: disable firewalldservice: name=firewalld state=stopped enabled=no- name: Disable SELinuxselinux:state: disabled- name: update selinuxlineinfile: dest=/etc/sysconfig/selinux regexp='SELINUX=' line='SELINUX=disabled'- name: disable swapcommand: swapoff -a- name: update fstablineinfile: dest=/etc/fstab regexp='swap' state=absent backup=yes- name: enable iptables ip6tablesblockinfile:path: /etc/sysctl.confblock: |net.bridge.bridge-nf-call-iptables = 1net.bridge.bridge-nf-call-ip6tables = 1- name: sysctl net.bridge.bridge-nf-call-iptables=1command: sysctl net.bridge.bridge-nf-call-iptables=1- name: sysctl net.bridge.bridge-nf-call-ip6tables=1command: sysctl net.bridge.bridge-nf-call-ip6tables=1- name: run shell install dockershell: curl -fsSL {{ shell_url }} | bash -s docker --mirror Aliyun- name: create pathfile: path=/etc/docker state=directory- name: restart dockerservice: name=docker state=restarted enabled=yes

1.2. kubectl 下载安装

国内直接使用阿里巴巴开源镜像站安装:

https://opsx.alibaba.com/mirror

从列表找到 kubernetes,点击帮助,显示如下信息。

重要提示:
可以从安裝列表去掉 kubeadm、kubelet,只安装 kubectl

Debian / Ubuntu

apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubectl

CentOS / RHEL / Fedora

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
setenforce 0
yum install -y kubectl

1.3. rke 下载安装

下载RKE二进制文件
在您的工作站上,打开Web浏览器并导航到我们的RKE版本页面。下载适用于您的操作系统和体系结构的最新RKE安装程序:

  • MacOS:rke_darwin-amd64
  • Linux(Intel / AMD):rke_linux-amd64
  • Linux(ARM 32位):rke_linux-arm
  • Linux(ARM 64位):rke_linux-arm64
  • Windows(32位):rke_windows-386.exe
  • Windows(64位):rke_windows-amd64.exe

将RKE二进制文件复制到您的文件夹中$PATH并重命名 rke(或 rke.exe 用于 Windows)。

# MacOS
$ mv rke_darwin-amd64 rke
# 增加可执行权限
$ chmod +x rke# Linux
$ mv rke_linux-amd64 rke
# 增加可执行权限
$ chmod +x rke# Windows PowerShell
> mv rke_windows-amd64.exe rke.exe

验证安装:

$ rke --version
# 输出类似下面版本信息
rke version v1.0.5

1.4. helm3 下载安装

官方文档:Installing Helm

针对 Linux 系统,使用下面的命令进行安装:

$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
$ chmod 700 get_helm.sh
$ ./get_helm.sh

1.5. ssh-key 和各个节点配置

假设分别为 NODE1, NODE2, NODE3 3个节点。

分别在每个节点上执行下面的命令生成密钥(我使用的 root 账号):

$ ssh-keygen -t rsa
# 之后会有一些默认选项和可以手工配置的选项,可以自行配制,或者一直回车用默认值
# 执行完成后,会生成两个文件
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

查看 id_rsa.pub 文件,复制文件内容,将 3 个节点的文件集合到一起,在每个节点上,切换到 rancher 用户,然后执行下面的命令:

# 创建 rancher 用户
$ useradd rancher
# 添加到 docker 组
$ usermod -aG docker rancher
# 切换到前面创建的用户
$ su rancher
# 进入自己的 home 目录
$ cd ~
# 创建 .ssh 目录
$ mkdir .ssh
# 写入3个服务的公钥
$ echo "复制的内容" >> .ssh/authorized_keys
# 设置权限
$ chmod 700 .ssh
$ chmod 644 .ssh/authorized_keys

配置后可以在 NODE1 测试:

$ ssh rancher@NODE2
# 连接成功后通过 exit 退出

特别注意!
两个潜在的坑,ssh配置authorized_keys后仍然需要输入密码的问题

  1. 注意$HOME/.ssh目录 或 $HOME目录的权限 最好是700,我就在这里栽跟头了。
  2. 注意uthorized_keys的权限 chmod 644 authorized_keys 这个也是要注意的。

Ansible Playbook

# 将主机的 id_rsa.pub 复制到指定主机用户下面
- name: init Rancher Userhosts: dockervars:user: ranchergroup: dockerid_rsa_pub: |改成自己的 id_rsa.pub 公钥tasks:- name: add useruser:name: "{{ user }}"groups: "{{ group }}"append: true- name: .sshfile:path: "/home/{{ user }}/.ssh"state: directoryowner: "{{ user }}"group: "{{ group }}"mode: 0700- name: .ssh/authorized_keysfile:path: "/home/{{ user }}/.ssh/authorized_keys"state: touchowner: "{{ user }}"group: "{{ group }}"mode: 0644- name: write id_rsa.pubblockinfile:path: "/home/{{ user }}/.ssh/authorized_keys"block: "{{ id_rsa_pub }}"

1.6. rke 配置集群

参考下面的示例创建rancher-cluster.yml文件,替换 nodes 3个节点的配置信息。

nodes:- address: 10.10.10.100user: rancherrole: [controlplane,worker,etcd]- address: 10.10.10.101user: rancherrole: [worker]- address: 10.10.10.102user: rancherrole: [worker]services:etcd:snapshot: truecreation: 6hretention: 24h

常见的RKE节点选项

Option Required Description
address yes 公共DNS或IP地址
user yes 可以运行docker命令的用户
role yes 分配给节点的Kubernetes角色列表
internal_address no 内部集群流量的私有DNS或IP地址
ssh_key_path no 用于对节点进行身份验证的SSH私钥的路径(默认为~/.ssh/id_rsa

高级配置
RKE有许多配置选项可用于自定义安装以适合您的特定环境。

有关选项和功能的完整列表,请参阅RKE文档。

要为更大的Rancher安装调整您的etcd集群,请参阅etcd设置指南。

特别注意:如果使用了阿里云等公有云环境时,确保主机之间端口能够互相访问,例如在阿里云配置:

网段IP提醒!!!
在公有云上,如果配置某个主机可以访问 POD IP,就需要配置路由表。
因此,如果一个账号的VPC网络下,配置多个集群时,需要将集群的IP网段合理划分避免冲突,产生冲突的时候,路由表不能重复配置一个网段,就无法访问了。
因此,这类情况下需要设置IP网段。
参考地址:https://rancher.com/docs/rke/latest/en/config-options/services/

根据自己的配置修改保存好 rancher-cluster.yml 后,执行下面的命令:

rke up --config ./rancher-cluster.yml

该命令根据网速等多种情况,需要等待很久。这期间输出的部分日志如下:

[root@localhost ~]# rke up --config ./rancher-cluster.yml
INFO[0000] Initiating Kubernetes cluster
INFO[0000] [certificates] Generating admin certificates and kubeconfig
INFO[0000] Successfully Deployed state file at [./rancher-cluster.rkestate]
INFO[0000] Building Kubernetes cluster
INFO[0000] [dialer] Setup tunnel for host [10.10.1.242]
INFO[0000] [dialer] Setup tunnel for host [10.10.1.241]
INFO[0000] [dialer] Setup tunnel for host [10.10.1.238]
INFO[0000] [network] Deploying port listener containers
INFO[0000] [network] Pulling image [rancher/rke-tools:v0.1.34] on host [10.10.1.238]
INFO[0000] [network] Pulling image [rancher/rke-tools:v0.1.34] on host [10.10.1.241]
INFO[0000] [network] Pulling image [rancher/rke-tools:v0.1.34] on host [10.10.1.242]
INFO[0030] [network] Successfully pulled image [rancher/rke-tools:v0.1.34] on host [10.10.1.241]

集群创建成功后,在当前目录下面有以下文件:

-rw-r-----  1 root root     5382 Aug  1 16:17 kube_config_rancher-cluster.yml
-rw-r-----  1 root root   114422 Aug  1 16:18 rancher-cluster.rkestate
-rw-r--r--  1 root root      423 Aug  1 15:50 rancher-cluster.yml

RKE 自动创建了一个 kube_config_rancher-cluster.yml,这个文件有 kubectlhelm 的凭据。

注意:
如果您使用了不同的文件名 rancher-cluster.yml,则 kube 配置文件将命名为 kube_config_<FILE_NAME>.yml

kube_config_rancher-cluster.yml 复制到 $HOME/.kube/config,如果想在其他节点通过 kubectl 访问集群,将该文件复制到其他节点的相同路径下。

现在可以通过 kubectl 来查看当前的节点状态:

$ kubectl get nodes
NAME          STATUS   ROLES                      AGE   VERSION
10.10.10.100   Ready    controlplane,etcd,worker   16m   v1.14.3
10.10.10.101   Ready    worker                     16m   v1.14.3
10.10.10.102   Ready    worker                     16m   v1.14.3

1.7. helm 安装 Rancher

参考文档:helm-rancher

1.7.1. 添加稳定版仓库:

helm repo add rancher-stable https://releases.rancher.com/server-charts/stable

1.7.2. 为Rancher创建名称空间

我们需要定义一个名称空间,应在该名称空间中安装由Chart创建的资源。这应该始终是cattle-system:

kubectl create namespace cattle-system

1.7.3. 选择您的SSL配置

本次选择 CA 颁发的可靠证书。

根据您自己的证书创建Kubernetes机密,以供Rancher使用。

创建证书配置:

kubectl -n cattle-system create secret tls tls-rancher-ingress \--cert=tls.crt \--key=tls.key

使用下面的命令安装:

helm install rancher rancher-stable/rancher \--namespace cattle-system \--set hostname=rancher.my.org \--set ingress.tls.source=secret

参考: https://rancher.com/docs/rancher/v2.x/en/installation/options/tls-secrets/

检查Rancher是否成功推出:

$ kubectl -n cattle-system rollout status deploy/rancher
Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available...
deployment "rancher" successfully rolled out

1.8. Rancher 配置

先配置后续的 MySQL 和 MQ,然后继续这里的内容。

浏览器打开 Rancher 地址,设置密码和服务访问的 URL 地址。

登录 Rancher 进入系统后,配置项目和命名空间。

配置 SSL 证书和容器仓库的登录凭证。

二、MySQL 安装和配置

参考:

  • MySQL 安装和配置
  • MySQL 主从配置以及 Docker 方式演练
  • MySQL 官方文档

分为以下几个步骤:

  1. yum 安装 MySQL
  2. 配置 my.cnf 文件
  3. 用户和权限配置
  4. 导入备份数据
  5. 定时备份

2.1. yum 安装 MySQL

2.2.1 安装 yum 存储库

这里针对 CentOS 的 yum 方式说明。下载 RPM 包:

下载地址:https://dev.mysql.com/downloads/repo/yum/

下载 rpm 后,使用下列命令安装 yum 存储库:

sudo yum localinstall xxx.rpm

2.2.2 选择安装版本

通过下面命令查询当前选择的版本:

yum repolist enabled | grep "mysql.*-community.*"

默认选择的最新版本。使用下面命令查看所有可选版本

yum repolist all | grep mysql

通过下面命令选择要安装的版本:

sudo yum-config-manager --disable mysql57-community
sudo yum-config-manager --enable mysql56-community

除了上面(不推荐)命令方式外,还可以通过手动编辑 /etc/yum.repos.d/mysql-community.repo 文件来选择版本:

[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/6/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

查找要配置的存储库的条目,然后编辑 enabled 选项。指定 enabled=0 禁用存储库或 enabled=1 启用存储库。
验证选择:

yum repolist enabled | grep mysql

2.2.3 安装

使用下面命令安装:

sudo yum install mysql-community-server

2.2. 配置 my.cnf 文件

安装MySQL之后,必须初始化数据目录,包括mysql系统数据库中的表。

https://dev.mysql.com/doc/refman/5.7/en/data-directory-initialization.html

配置前,先通过下面命令查看 MySQL 的基本信息:

mysqld --verbose --help

这个命令会输出非常多的信息,部分关键信息如下。

Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/my.cnf

从这部分可以看到默认配置文件位置的优先顺序,我们可以在合适的位置创建该配置,然后配置数据目录(下面的 /data 目录是一个单独挂载的磁盘,可以根据自己需要修改)。

目录权限说明
参考:初始化数据目录
下面的配置中有 /data/mysql/data 和 log
这些目录必须分配给 mysql 用户和 mysql 组。
例如:

chown mysql:mysql /data/mysql/data
chown mysql:mysql /data/mysql/log
chmod 750 /data/mysql/data
chmod 750 /data/mysql/log

如果权限不对,在启动服务时会出错。
如果 mysql 帐号不存在,使用下面命令创建。

$ groupadd mysql
$ useradd -r -g mysql -s /bin/false mysql

示例:

[mysqld]
# 提前创建好目录
# /data/mysql/data
# /data/mysql/log
datadir=/data/mysql/data
socket=/var/lib/mysql/mysql.sock# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0log-error=/data/mysql/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pidcollation-server=utf8_general_ci
character-set-server=utf8
init-connect='SET NAMES utf8'
# 连接数
max_connections=2000
# 忽略大小写
lower_case_table_names=1#全局事务配置
#参考:https://www.cnblogs.com/jywy/p/11058067.html
transaction_isolation=READ-COMMITTED# 主从配置
server-id=1
log-bin=mysql-bin
innodb_flush_log_at_trx_commit=2
sync_binlog=1000
# 日志保留时间
expire-logs-days=7# 内存配置
# https://dev.mysql.com/doc/refman/8.0/en/innodb-buffer-pool-resize.html
innodb_buffer_pool_size=4G
innodb_buffer_pool_instances=16
innodb_log_file_size=256M

做好基础配置后,执行命令初始化,mysqld 初始化时两个参数说明:

  • 使用 --initialize “ 默认安全 ”安装(即包括生成随机初始的 root密码)。在这种情况下,密码被标记为已过期,您将需要选择一个新密码。

  • 使用 --initialize-insecure,不会root生成密码。这是不安全的;假定您在将服务器投入生产使用之前会及时为帐户分配密码。

在Unix和类Unix的系统上,mysql 拥有数据库目录和文件的权限非常重要, 这样服务器在之后运行时对其具有读写访问权限。为了确保这一点,请指定 --user=mysql,执行下面的其中一个命令:

mysqld --initialize --user=mysql
mysqld --initialize-insecure --user=mysql

重点提醒!!!
因为 mysqld 服务是以 mysql 用户和组运行的,所以上面初始化目录的时候,必须用 mysql 用户,否则生成的文件权限都是 root:root。这会导致 mysqld 服务启动的时候因为没有权限而无法启动。

这之后就会在 datadir 下面生成基础表和数据。

初始化完成后,通过 systemctl enable mysqld 设置 MySQL 开机启动,通过 systemctl start mysqld 启动 MySQL 服务,除此之外比较常用的操作如下:

  • 关闭:systemctl stop mysqld
  • 重启:systemctl restart mysqld

2.3. 用户和权限配置

官方文档:https://dev.mysql.com/doc/refman/5.7/en/account-management-statements.html

服务启动后,使用下面命令登录系统:

mysql -uroot -p

如果是安全模式,上面初始化时会生成随机密码,如果不是安全模式,默认没有密码。

登录系统后,可以通过下面的命令配置新的密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'root-password' PASSWORD EXPIRE NEVER;

MySQL8 无法通过 navicat 登录,可以修改密码插件:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '';

如果需要 MySQL 可以被远程访问,可以添加下面的账号:

CREATE USER 'root'@'%' IDENTIFIED BY 'root-password' PASSWORD EXPIRE NEVER;

也可以直接修改默认的 localhost,如下 SQL:

use mysql;
update user set host = '%' where user = 'root';

附加
由于在导入备份时经常遇到下面的错误:

ERROR 1449 <HY000> at line xxx: The user specified as a definer <;root'@'%'> does not exist

可能还需要重新给 root 分配权限:

GRANT ALL ON *.* TO root;

主从配置
创建用于复制的用户
CREATE USER 'repl'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;;
赋予权限
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

特别注意:MySQL默认用户密码不是永久有效,这会导致1年后帐号密码无法登录

2.4. 导入备份数据

通过下面的脚本备份全库数据:

mysqldump --all-databases --master-data --single-transaction --include-master-host-port -uroot -p密码 | gzip > mysql-bak.gz

注意
上面的操作也会覆盖用户和密码信息,2.3 中的部分操作可能要重复操作一次或者验证一下。

将压缩包拷贝到数据库服务器,通过下面的脚本导入数据:

gunzip < mysql-bak.gz | mysql -uroot -p

数据量大时,导入时间会很长

2.5. 定时备份

参考:MySQL 备份和还原

全库备份脚本:

day=7
D=$(date +%Y%m%d%H%M)
DUMP=/data/mysql/bak/mysql-${D}.gz
echo 备份路径: $DUMP
echo 开始备份: $(date)
mysqldump --all-databases --master-data --single-transaction --include-master-host-port -uroot -p密码 | gzip > $DUMP
echo 备份完成: $(date)
echo 开始清理 ${day} 天前备份
for((i=$day;i<=14;i++));do rm -f /data/mysql/bak/mysql-$(date -d "-$i day" +"%Y%m%d")*.gz; done;
echo 清理完成

--master-data 这个选项会在备份中记录主库二进制文件名和位置,方便更新后同步数据,也方便从库配置。

例如保存上述脚本到 /data/mysql/bak/bak.sh 文件中。

通过 crontab -e 编辑定时任务,输入:

0 0,12,18 * * * sh /data/mysql/bak/bak.sh

在每天 0 点,12点和18点备份数据,自己可以修改。

三、RabbitMQ 安装和配置

参考:

  • RabbitMQ 安装配置和 Spring 集成
  • RabbitMQ 启用 HTTP 后台认证
  • 配置 Docker 容器的 RabbitMQ

分为以下几个步骤:

  1. Package Cloud 方式安装
  2. 插件配置
  3. auth_http 配置
  4. 消息账号和虚拟主机等配置

3.1. Package Cloud 方式安装

由于我个人更多的在 centos 安装,因此这里插入最快安装的过程,使用 Package Cloud 方式。

3.1.1. 安装 erlang

打开 https://packagecloud.io/rabbitmq/erlang/install#bash-rpm
执行:

curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash

然后 yum install erlang 安装

3.1.2. 安装 rabbitmq

打开 https://packagecloud.io/rabbitmq/rabbitmq-server/install#bash-rpm
执行:

curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash

然后 yum install rabbitmq-server 安装完成。

3.1.3. 添加用户

添加用户 root,密码 root。(根据自己需要设置

sudo rabbitmqctl add_user root root

给 root 添加管理权限。

sudo rabbitmqctl set_user_tags root administrator

给 root 添加默认虚拟主机的所有权限。

sudo rabbitmqctl set_permissions -p / root ".*" ".*" ".*"

3.2. 插件配置

启用多个插件:

sudo rabbitmq-plugins enable rabbitmq_management \ rabbitmq_auth_backend_http \ rabbitmq_auth_backend_cache \ rabbitmq_web_stomp

启用插件后不需要重启服务

此后可以直接访问 rabbitmq 的 http://RabbitMQ服务IP:15672 通过 WEB 进行管理。

启用其他插件:

下面配置 auth_http。

3.3. auth_http 配置

打开或创建 /etc/rabbitmq/rabbitmq.conf 配置文件,添加如下配置:

auth_backends.1 = cache
# 启用 cache 后,不需要直接指定 http 方式
# auth_backends.1 = http
auth_backends.2 = internal
# 缓存后端指定为 http
auth_cache.cached_backend = http
# 认证请求类型
auth_http.http_method   = post
# 认证和授权地址,官方提供了 Spring Boot 示例
# 根据需要配置下面地址
auth_http.user_path = http://localhost:8080/auth/user
auth_http.vhost_path = http://localhost:8080/auth/vhost
auth_http.resource_path = http://localhost:8080/auth/resource
auth_http.topic_path = http://localhost:8080/auth/topic
# 缓存时间,单位毫秒
auth_cache.cache_ttl = 60000

配置 http 认证主要是为了方便前端以自定义的认证方式连接 web stomp 协议,否则帐号密码一泄漏,都能随便获取 mq 消息了。

3.4. 消息账号和虚拟主机等配置

使用前面创建的用户登录 MQ,创建必须的账号、密码、虚拟主机,还可以进行其他的配置。

四、镜像服务

阿里云有 AWR、华为云有 SWR,都是免费的容器镜像服务,因此在这类公有云使用时可以直接使用现成的服务,能够节省磁盘和带宽,速度还快。

没有现成服务的情况下可以直接在 Rancher 商店启动 Harbor,本文不再介绍。

五、部署服务、调试

分为以下几个步骤:

  1. 导入 configMap 配置
  2. 配置数据库,MQ 等 DNS
  3. 部署 zookeeper, xxl-job, redis, dubbo-admin 等基础服务
  4. 部署微服务
  5. 配置域名和地址服务映射
  6. 调试

5.1. 导入 configMap 配置

参照测试集群,通过类似下面的命令导出所有需要的配置:

kubectl get configmap -n=命名空间 -o yaml > configmap-bak.yaml

导出配置后,在新的集群可以通过命令或 kubectl 导入后再做简单修改。

5.2. 配置数据库,MQ 等 DNS

在工作负载中配置 DNS,增加 mysql 和 rabbitmq 服务,直接设置 IP 为数据服务器的 IP。

后续内部访问时,直接通过 mysql 和 rabbitmq 映射到实际 IP。

5.3. 部署 zookeeper, xxl-job, redis, dubbo-admin 等基础服务

部署基础服务。

包含 zookeeper, xxl-job, redis, dubbo-admin 等服务。

5.4. 部署微服务

微服务搭建过程。

5.5. 配置域名和地址服务映射

Ingress 配置。

5.5.1. Ingress 配置

完整配置看这里:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/

5.5.1.1. 设置上传文件大小

配置 Ingress 时,需要添加下面的注释

nginx.ingress.kubernetes.io/proxy-body-size: 50m

如下图所示:

否则默认情况下上传文件限制为 1M。

5.5.1.2. 设置发送超时时间

除此之外,如果上传大文件出现超时,可以配置:

nginx.ingress.kubernetes.io/proxy-send-timeout: 60s

5.6. 调试

服务调试。

PaaS 以及全套服务微服务搭建流程相关推荐

  1. 微服务 微服务架构

    微服务 & 微服务架构 单体架构 VS 微服务架构 单体架构 一个工程对应一个归档包(war),这个war包 包含了该工程的所有功 能.我们成为这种应用为单体应用,也就是我们常说的单体架构(一 ...

  2. 微服务-微服务为什么要用到 API 网关

    什么是微服务 微服务架构(通常简称为微服务)是指开发应用所用的一种架构形式.通过微服务,可将大型应用分解成多个独立的组件,其中每个组件都有各自的责任领域. 在处理一个用户请求时,基于微服务的应用可能会 ...

  3. 【SpringCloud从0到6】 第一节:初识微服务微服务的雪崩效应

    1 . 传统单机服务 概念 : 所有的功能模块全部写在一起 , 打到一个war包里进行发布 , 除了容器(Tomcat等)以外基本没有其他依赖 . 它的结构图如下 : 单机服务中 , 一个模块包含了U ...

  4. 小程聊微服务--微服务思想

    前言 一直对微服务非常感兴趣,因为公司的架构改造正好有机会能够接触微服务,买来一些书,请教了很多微服务大牛同时自己也做了很多总结,写成了80页ppt,算是我对微服务的一个认识吧,微服务本身不同的人有不 ...

  5. SpringCloud Alibaba 微服务 — 微服务网关 Gateway

    一.Spring Cloud Gateway 简介 Spring Cloud Gateway 是 Spring 官方基于 Spring 5.x.Spring Boot 2.x.Spring WebFl ...

  6. 从零开始学习微服务 -微服务基本概述、微服务案例

    1. SpringCloud概述 1.1 互联网应用架构 1.1.1 单体应用架构 在诞⽣之初,项目的⽤户量.数据量规模都⽐较⼩,项目所有的功能模块都放在一个工程中编码. 编译.打包并且部署在一个To ...

  7. 什么是微服务? 微服务概念

    什么是微服务? GitHub demo 地址: https://github.com/TongBlackLittle/springCloud 该 demo 为 springCloud 全家桶的整合项目 ...

  8. springcloud---微服务/微服务架构概念,优缺点。

    从技术维度理解: 微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底 地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事, 从技术角度看就是一种小而独立的处理过程,类 ...

  9. 华为云服务-微服务部署后的WEB服务日常如何运维

    文章目录 前言 华为云平台下WEB服务日常如何运维 一.主机监控-Agent 步骤一 .AOM控制台 步骤二.Agent管理 步骤三 .安装Agent 步骤四 .Agent管理-查看虚拟机 步骤五.应 ...

最新文章

  1. 国外厂商在行业客户上输单的原因
  2. 用Python解“打印九九乘法表”题
  3. Linux系统编程之查看文件大小的方法(lseek_fseek_stat)
  4. TWaver html5 + NodeJS + express + websocket.io + redis 快速搭建项目(一)
  5. ASP.NET MVC 框架路线图更新 【转】
  6. 如果计算机用户有密码 待机,电脑待机密码怎么设置
  7. 初学者万年历c语言源代码,C语言万年历的源程序
  8. 特斯拉:国内超级充电桩已超6000个
  9. dubbox 的各种管理和监管
  10. python反编译学习之字节码详解
  11. ECharts - dataset组件的用法详解
  12. Microsoft Visio 软件的使用
  13. 阿帕奇服务器配置文件,阿帕奇服务器基本参数配置
  14. css之3D旋转讲解
  15. 还在用纸质表进行设备巡检?
  16. 戴尔服务器raid用联想硬盘吗,戴尔服务器安装centons系统硬盘格式是raid还是ahci...
  17. 【技术方案】一对一或一对多音视频通话会议系统,可以通过哪些方式实现?
  18. 【R language】 清楚区分输出函数 cat、print、paste 区别 经验分享
  19. vue中实现文字超过2行... 展开-收起(兼容ie)
  20. CF1004D Sonya and Matrix

热门文章

  1. rsync数据同步+inotify实时同步
  2. 前端JavaScript——js声明定义数组及常用操作
  3. OC中NSDictionary常用方法总结
  4. 厉害呀!这些图片难得
  5. T31901 狂热粉丝
  6. linux iptables启动问题
  7. Typora图片不能加载: image load failed
  8. Netbeans 'badly formed maven project' 问题
  9. 布隆过滤器-BloomFilter
  10. SOLOT的开发日记(二)