概述

花了一周终于把rancher成功部署起来了,最开始使用的是docker,但是docker不能部署多节点,所以后面又尝试了k3s和rke,但是坑太多了,最后只有k3s和docker成功了。
docker比较简单就不说了,这里我记录下自己使用k3s方式部署
内容来源:传送门

准备工具

服务器

要求至少2核4g,最好4和8g,才能运行好各种服务。如果没钱可以去阿里云买那种按照时薪计算的,测试完毕就销毁。

准备材料

至少准备1台(高可用就准备3台)linux服务器,推荐ubuntu18,服务器性能建议4核8g以上(第一次部署其实已经成功了,但是1核2g性能太差跑不起来,高可用就准备2台)
准备1个域名,准备好对应的ssl证书

准备一个mysql数据库

apt update
apt install mysql
mysql

#建议:不要把root账户共享出去,密码设置必须有大写英语字母、小写英语字母、特殊符号、数字
mysql> use mysql;
mysql> create user '账户名称'@'%' identified by '密码';
Query OK, 0 rows affected (0.01 sec)

mysql> GRANT ALL PRIVILEGES ON *.* TO '账户名称'@'%';
Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit;

#修改mysql配置文件
vim /etc/mysql/mysql.conf.d/mysqld.cnf
#将里面的bind-address = 127.0.0.1注释掉

#然后 重启
service mysql restart
#别忘了开启阿里云的3306端口

安装docker

卸载旧版本
旧版本的 Docker 称为 docker 或者 docker-engine,使用以下命令卸载旧版本:

$ sudo apt-get remove docker \
               docker-engine \
               docker.io

使用 APT 安装
由于 apt 源使用 HTTPS 以确保软件下载过程中不被篡改。因此,我们首先需要添加使用 HTTPS 传输的软件包以及 CA 证书。

$ sudo apt-get update

$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

为了确认所下载软件包的合法性,需要添加软件源的 GPG 密钥。

$ curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

然后,我们需要向 source.list 中添加 Docker 软件源

$ sudo add-apt-repository \
    "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
    $(lsb_release -cs) \
    stable"
    # 以上命令会添加稳定版本的 Docker CE APT 镜像源,如果需要测试或每日构建版本的 Docker CE 请将 stable 改为 test 或者 nightly。

安装 Docker
更新 apt 软件包缓存,并安装 docker-ce:

$ sudo apt-get update
$ sudo apt-get install docker-ce

设置docker开机自动启动

systemctl start docker.service
systemctl enable docker.service

安装k3s-server

安装k3s server(安装过程中可能会提示某些端口无法访问,到阿里云打开)

curl -sfL https://docs.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - server \
--datastore-endpoint="mysql://username:password@tcp(hostname:3306)/database-name"
#这里有一个坑,@tcp()这个不能省,直接把数据库ip替换hostname就好

检查k3s是否成功

sudo k3s kubectl get nodes

大概会得到这样的结果:

ubuntu@ip-172-31-60-194:~$ sudo k3s kubectl get nodes
NAME               STATUS   ROLES    AGE    VERSION
ip-172-31-60-194   Ready    master   44m    v1.17.2+k3s1
ip-172-31-63-88    Ready    master   6m8s   v1.17.2+k3s1

检查测试集群容器运行状况

sudo k3s kubectl get pods --all-namespaces

在另外一台linux服务器也要这么操作

保存kubeconfig文件

如果只有一个节点不需要转发可跳过

在每个 Rancher Server 节点上安装 K3s 时,会在节点上/etc/rancher/k3s/k3s.yaml位置创建一个kubeconfig文件。该文件包含用于完全访问集群的凭据,您应该将此文件保存在安全的位置。

要使用此kubeconfig文件,

  1. 安装 Kubernetes 命令行工具kubectl。
  2. 将文件/etc/rancher/k3s/k3s.yaml复制并保存到本地计算机上的~/.kube/config文件中。
  3. 在这个 kubeconfig 文件中,server参数为 localhost。您需要手动更改这个地址为负载均衡器的 DNS,并且指定端口 6443。(Kubernetes API Server 的端口为 6443,Rancher Server 的端口为 80 和 443。)以下是一个示例k3s.yaml:
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: [CERTIFICATE-DATA]
    server: [LOAD-BALANCER-DNS]:6443 # 编辑此行
  name: default
contexts:
- context:
    cluster: default
    user: default
  name: default
current-context: default
kind: Config
preferences: {}
users:
- name: default
  user:
    password: [PASSWORD]
    username: admin

结果: 您现在可以使用kubectl来管理您的 K3s 集群。如果您有多个 kubeconfig 文件,可以在使用kubectl时通过传递文件路径来指定要使用的 kubeconfig 文件:

kubectl --kubeconfig ~/.kube/config/k3s.yaml get pods --all-namespaces

有关kubeconfig文件的更多信息,请参考 K3s 文档或官方 Kubernetes 文档中关于使用kubeconfig文件访问集群的部分。

检查集群 Pod 的运行状况

既然已经设置了kubeconfig文件,就可以使用kubectl从您的本地计算机访问集群了。

检查所有需要的 Pod 和容器是否状况良好:

ubuntu@ip-172-31-60-194:~$ sudo kubectl get pods --all-namespaces
NAMESPACE       NAME                                      READY   STATUS    RESTARTS   AGE
kube-system     metrics-server-6d684c7b5-bw59k            1/1     Running   0          8d
kube-system     local-path-provisioner-58fb86bdfd-fmkvd   1/1     Running   0          8d
kube-system     coredns-d798c9dd-ljjnf                    1/1     Running   0          8d

结果: 您已确认可以使用kubectl访问集群,并且 K3s 集群正在正确运行。现在,可以在集群上安装 Rancher Server 了。

安装rancher

安装kubectl和helm

安装kubectl

curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
kubectl version --client

安装helm
这个比较慢,大概十分钟,如果你能科学上网会比较快

curl https://helm.baltorepo.com/organization/signing.asc | sudo apt-key add -
sudo apt-get install apt-transport-https --yes
echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm

添加helm仓库

有三个:latest、stable、alpha
建议stable
把下方CHART_REPO改为stable

helm repo add rancher-<CHART_REPO> http://rancher-mirror.oss-cn-beijing.aliyuncs.com/server-charts/<CHART_REPO>

创建namespace

kubectl create namespace cattle-system

注意,如果一会安装出错了,可以执行kubectl delete namespaces cattle-system把对应的域删了重来

安装cert-manager

# 安装 CustomResourceDefinition 资源

kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.15.0/cert-manager.crds.yaml

# **重要:**
# 如果您正在运行 Kubernetes v1.15 或更低版本,
# 则需要在上方的 kubectl apply 命令中添加`--validate=false`标志,
# 否则您将在 cert-manager 的 CustomResourceDefinition 资源中收到与
# x-kubernetes-preserve-unknown-fields 字段有关的验证错误。
# 这是一个良性错误,是由于 kubectl 执行资源验证的方式造成的。

# 为 cert-manager 创建命名空间

kubectl create namespace cert-manager

# 添加 Jetstack Helm 仓库

helm repo add jetstack https://charts.jetstack.io

# 更新本地 Helm chart 仓库缓存

helm repo update

# 安装 cert-manager Helm chart

helm install \
 cert-manager jetstack/cert-manager \
 --namespace cert-manager \
 --version v0.15.0

建议使用let’s encrypt的证书,简单好用

helm install rancher rancher-<CHART_REPO>/rancher \#记得修改chart_repo
 --namespace cattle-system \
 --set hostname=rancher.my.org \ #你之前注册的域名
 --set ingress.tls.source=letsEncrypt \
 --set letsEncrypt.email=me@example.org # 你的邮箱

执行之后等待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

验证 Rancher Server 是否已成功部署

检查 Rancher Server 是否运行成功:
这个一定要执行

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

如果看到以下错误: error: deployment “rancher” exceeded its progress deadline, 您可以通过运行以下命令来检查 deployment 的状态(相信我,他的报错你根本不知道怎么解决,如果出现错误,肯定是上面某一步没执行好,重来吧):

kubectl -n cattle-system get deploy rancher
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
rancher 3 3 3 3 3m

DESIRED和AVAILABLE应该显示相同的个数。
安装完毕之后等待一段时间(五分钟)即可访问。

后记

记得自己配置nginx转发流量

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐