分享

ArcGIS Enterprise on Kubernetes 云原生部署方法(Rancher)

 GIS荟 2022-10-31 发布于四川

前言:简单介绍 ArcGIS 的云原生产品 ArcGIS Enterprise on Kubernetes 以及详细的部署(Rancher方式)过程。

云原生

ArcGIS Enterprise on Kubernetes 是一个面向 ArcGIS Enterprise 制图和分析软件的部署选项。它使用微服务和容器化方式提供云原生架构,运行在组织的 Kubernetes 平台或云供应商的 Kubernetes 服务。

云原生(CloudNative)是一个组合词,Cloud+Native。Cloud表示应用程序位于云中,而不是传统的数据中心;

Native表示应用程序从设计之初即考虑到云的环境,原生为云而设计,在云上以最佳姿势运行,充分利用和发挥云平台的弹性+分布式优势。

简单来说云原生就是生来为云,整个程序和架构就是完完全全重构为云端而生,而不是传统的以桌面软件为设计目标。

ArcGIS Enterprise on Kubernetes

ArcGIS 在上一个版本服务器产品(ArcGIS10.9版本,现在最新的是 ArcGIS11,截止文章分享日期) 中已经支持了云原生部署——ArcGIS Enterprise on Kubernetes。这是一个基于微服务的完整架构重新设计,软件通过容器(Docker)交付,并由 Kubernetes(K8S)进行容器编排管理。

以上只是一个简单的了解,重点是如何部署,更详细的说明可以查看官方文档,以后细说。

官方 ArcGIS Enterprise on Kubernetes 简介.https://enterprise-k8s./zh-cn/10.9.1/introduction/what-is-arcgis-enterprise-kubernetes.htm

安装

就像一开始说的,原生为云而设计,在云上以最佳姿势运行,不同于以往一个一个安装包的安装设置,ArcGIS Enterprise on Kubernetes 的安装可以通过脚本很快的配置完成,其安装速度和便利性是远胜传统的 ArcGIS Server 和 ArcGIS Portal,如果有安装过的朋友应该知道,这两个东西一般要安装大半天,如果不熟练,一天都不一定能搞定。

1.系统要求和环境准备

一共准备了5台机器:

  • master 和 worker1、worker1 机器作为我们的 ArcGIS Enterprise on Kubernetes 的主要工作;

  • nfs 服务器作为数据存储,栅格数据、矢量数据之类的;

  • docker 仓库机器用于保存我们的 ArcGIS Enterprise on Kubernetes 的安装包,在安装完成后可以不再使用这台机器,或者讲  docker 仓库搭建在上面任意机器都是可以的。

节点IP机器名
master192.168.0.8master.geoscenedongxf.cn
worker1192.168.0.2worker1.geoscenedongxf.cn
worker2192.168.0.5worker2.geoscenedongxf.cn
nfs服务器192.168.0.6nfs.geoscenedongxf.cn
docker仓库192.168.0.7oscene.local

对应的的机器配置

2.基础环境搭建

在除了nfs服务器节点的每台机器上做如下设置。

2.1更新 host 文件、修改机器名

每台机器均安装 Linux CentOS-7 发行版

hostnamectl set-hostname master.geoscenedongxf.cn

hostnamectl set-hostname worker1.geoscenedongxf.cn

hostnamectl set-hostname worker2.geoscenedongxf.cn

hostnamectl set-hostname nfs.geoscenedongxf.cn

hostnamectl set-hostname oscene.local

2.2升级Linux内核

#导入ELRepo仓库的公钥

rpm --import https://www./RPM-GPG-KEY-

#为yum安装ELRepo仓库

rpm -Uvh http://www./elrepo-release-7.0-3.el7.elrepo.noarch.rpm

#查看可用版本

yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

#安装最新内核

yum --enablerepo=elrepo-kernel install -y kernel-ml

# 查看当前机器可用内核

sudo awk -F' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

更改默认启动内核项

grub2-set-default 0 #第0个可用内核

重启机器

reboot

2.3 关闭机器防火墙

查看防火墙当前状态

systemctl status firewalld.service

关闭

systemctl stop firewalld.service

systemctl disable firewalld.service

2.4 关闭selinux

setenforce 0  # 用于临时关闭

vi /etc/sysconfig/selinux  # 用于永久关闭

将SELINUX=enforcing改为SELINUX=disabled

然后保存退出

2.5 关闭swap分区

sed -ri 's/.*swap.*/#&/' /etc/fstab

cat /etc/fstab

2.6 时间节点同步:

yum install ntpdate -y

ntpdate ntp2.aliyun.com

2.7 安装docker

yum install -y yum-utils

# 添加yum源,这里添加的是阿里云的yum源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 查看docker版本

yum list docker-ce --showduplicates | sort -r

# 您可以选择其他版本

yum -y install docker-ce-20.10.12-3.el7

#配置docker镜像加速

mkdir -p /etc/docker

 tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://s2q9fn53.mirror."]
}
EOF

systemctl daemon-reload

systemctl restart docker

# 设置docker开机启动

systemctl enable docker

3.配置共享存储

3.1安装 NFS 服务(NFS 端)

# 停止并禁用防火墙

systemctl stop firewalld

systemctl disable firewalld

#关闭并禁用SELinux

setenforce 0

sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config

#安装nfs-utils和rpcbind

yum install -y nfs-utils rpcbind

systemctl start rpcbindsystemctl enable rpcbindsystemctl start nfssystemctl enable nfs

#创建共享目录配置

mkdir -p /home/arcgisk8s

chmod 755 /home/arcgisk8s

vi /etc/exports

在该文件里添加如下内容:

/home/arcgisk8s  *(rw,sync,no_root_squash)

exportfs -r

showmount -e nfs服务器IP  #看共享目录是否能正常export

比如:

showmount -e 10.10.10.241

3.2在 k8s 各个节点挂载共享目录

仅安装nfs-utils

yum install -y nfs-utils

systemctl start nfssystemctl enable nfs

创建挂载目录

mkdir -p /mnt/arcgisk8s

chmod 755 /mnt/arcgisk8s

vi /etc/fstab #在该文件中挂载,使系统每次启动时都能自动挂载

nfs服务端 IP:xxxxx

10.10.10.241:/home/arcgisk8s /mnt/arcgisk8s nfs defaults 0 0

192.168.0.6:/home/arcgisk8s /mnt/arcgisk8s nfs defaults 0 0

mount -a #使文件/etc/fstab生效

查看挂载情况

df -h

4.部署 Rancher(选择一个节点即可)

Rancher 是一个开源的项目,提供了在产品环境中对 Docker 容器进行全方位管理的平台。

使用 Rancher 可以快速部署 Kubernetes,较为方便。

4.1 创建rancher的挂载目录

mkdir -p /rancher_home/rancher

mkdir -p /rancher_home/auditlog

4.2 启动rancher

docker run -d  --privileged=true --restart=unless-stopped -p 9080:80 -p 9443:443 -v /rancher_home/rancher:/var/lib/rancher -v /rancher_home/auditlog:/var/log/auditlog --name rancher rancher/rancher:stable

启动完毕后,可以进入界面

https://安装机器IP:9443

4.3获取登录密钥

docker ps # 获取 rancher 容器的 ID,然后替换下面的container-id

获取登录密钥

docker logs  container-id  2>&1 | grep "Bootstrap Password:"

比如:

docker logs bfa867550fce 2>&1 | grep "Bootstrap Password:"

4.4创建账户

默认账户名:admin

密码自己设置

用户名:admin

密码:3gpftxj2ckjlcx

4.5设置中文

5.创建 k8s 集群

注意:如果创建k8s集群失败或者要重新创建集群,使用以下 .sh 命令做完全清理。

# 清理 rancher(k8s)集群机器
# 在集群安装操作错误,出现安装出现问题,最好做一下清理后重建方能正常,下面是一段清理脚本:
# !!!下面这两个命令会删除机器上所有容器(请慎重!你可以手工挨个删除或修改一下命令过滤条件)
docker rm -f $(sudo docker ps -aq);
docker volume rm $(sudo docker volume ls -q);

rm -rf /etc/cni \
       /etc/kubernetes \
       /opt/cni \
       /opt/rke \
       /run/secrets/ \
       /run/calico \
       /run/flannel \
       /var/lib/calico \
       /var/lib/etcd \
       /var/lib/cni \
       /var/lib/kubelet \
       /var/lib/rancher/rke/log \
       /var/log/containers \
       /var/log/pods \
       /var/run/calico

for mount in $(mount | grep tmpfs | grep '/var/lib/kubelet' | awk '{ print $3 }') /var/lib/kubelet /var/lib/rancher; do umount $mount; done

rm -f /var/lib/containerd/io.containerd.metadata.v1.bolt/meta.db
sudo systemctl restart containerd
sudo systemctl restart docker

5.1创建

点击框选处的创建

选择自定义

定义Cluster名字

选择k8s的版本v1.21.9;由于ArcGIS Enterprise on K8s本身内置了一个nginx Ingress服务,因此,这里禁用;其他均采用默认参数

5.2节点选项

etcd、ControlPlane、worker 全部勾选后,复制下方的命令输入到 master 终端并运行。

待激活后

勾选 Worker,然后复制命令到 worker1 机器上运行,成功激活后再复制命令带到 worker2 运行。

所有节点激活成功并启动:

6.安装 Kubectl(选择一个节点)

Kubectl 是 k8s 自身的重要管理工具。

6.1安装和部署 kubectl

安装(Master节点)

方法3(使用该方法)

https:///docs/tasks/tools/install-kubectl-linux/

下载包

下载最新版(推荐)

curl -LO "https://dl./release/$(curl -L -s https://dl./release/stable.txt)/bin/linux/amd64/kubectl"

或者下载指定版本

curl -LO https://dl./release/v1.20.12/bin/linux/amd64/kubectl

安装包

sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

查看安装版本

kubectl version --client

6.2 获取kubeconfig

登录 rancher,并点击进入之前创建的 cluster 集群即 arcgisk8s 的仪表盘,点击右上角的 Copy Kubeconfig to Clipboard 按钮获取 kubeconfig 内容。

6.3在 master 节点上创建 kubeconfig 文件

输入上述获得的信息,以运行部署脚本和其他测试

mkdir -p ~/.kube

vi ~/.kube/config

验证kubeconfig配置

运行获取所有节点信息,即说明配置成功

kubectl get nodes

7.登录镜像仓库

关于私库的搭建方法自己网上找吧,挺多的。

在每个节点上,登录私库并输入账户和密码,确保部署阶段可成功拉取镜像

7.1登录

docker login https://oscene.local

如果是非 https 私库

比如这个 docker login repo.geoscene.cn:5000

所有在所有节点的 daemon.json 中设定不验证私库证书

vi /etc/docker/daemon.json

添加:

"insecure-registries": ["repo.geoscene.cn:5000"],

"registry-mirrors": ["XXX"]

添加后重启 docker

systemctl daemon-reload

systemctl restart docker

7.2 放置证书

1)在/etc/docker/certs.d下建立文件夹,文件夹名字是私有仓库的域名,即oscene.local

2)将证书拷贝至oscene.local文件夹下

8.运行部署脚本

8.1创建命名空间

kubectl create namespace arcgis

8.2 上传安装包,解压

将 ArcGIS_Enterprise_Kubernetes_1091_180123.tar.gz 上传至master节点(也可任一节点)。本次压缩包都放置于 master 节点。

解压文件 tar -zxvf .....

tar -zxvf ArcGIS_Enterprise_Kubernetes_1091_180123.tar.gz

8.3 准备加密文件

使用安装包中提供的工具来创建加密文件:tools 下的 password-encrypt.sh。

运行该工具需要两个参数,一个是 keyfile 的全路径;一个是密码。

#创建 keyfile 文件和文件夹

#创建文件夹 地址随意

mkdir -p  /home/EncryptionKeyfile  

#导航至新建的地址,创建 keyfile 文件

#内容随意,但不能为空,否则下面执行工具会失败。

cd /home/EncryptionKeyfile

cat<<EOF>keyfile.txt
123                                
EOF

8.4运行脚本

进入目录

cd /home/arcgis-enterprise/1091/setup/tools/password-encrypt

运行,密码设置为arcgis@123

sh password-encrypt.sh -f /home/EncryptionKeyfile/keyfile.txt -p "arcgis@123"

执行会返回密码的加密字符串。拷贝下来,并替换掉keyfile.txt的随意文本。

返回token

U2FsdGVkX1/+msKUK481LibRhj6Hoqogfp8x8m0OGqE=    

用返回的token替换123

cd /home/EncryptionKeyfile

vi keyfile.txt

再次确保每个节点都已成功登录连接到镜像仓库。

8.4 部署

撤销部署

(如果最后在网页配置 ArcGIS 组织时失败,取消部署后重新部署

#导航至 setup目录

cd  /home/arcgis-enterprise/1091/setup

./undeploy.sh -n arcgis

重新部署后,重新修改 arcgis-ingress-nginx 的 Service 配置文件。)

执行部署脚本

#导航至 setup目录

cd  /home/arcgis-enterprise/1091/setup

运行部署代码

./deploy.sh

填写相应参数:

n

n

arcgis

/home/EncryptionKeyfile/keyfile.txt

oscene.local

esridocker

geoscene

geoscene1234

master.geoscenedongxf.cn

arcgis

4

arcgis

最后点击 Enter 部署即可。

9.创建组织

9.1 配置externalIP

配置externalP确保外部可访问 arcgis 的组织创建页面

1)在cluster界面,点击Service Discovery -> Services,找到arcgis-ingress-nginx这一服务

2)点击Edit YAML

3)添加 externalIPs 项,设置为 Master 节点的 ip

确保外部可以访问到 arcgis 组织创建界面

externalIPs: - 192.168.0.8  (这里填 master 节点的 IP)

9.2 配置coredns

1)在cluster界面,确保namespace为All namespaces,点击More Resources->Core->ConfigMaps下的coredns,点击Edit YAML

或者在存储-ConfigMaps 下也能找到

2) 添加域名和ip的映射

      hosts {
         <master节点IP> <Master节点全限定域名>
         fallthrough
       }

9.3 创建 storage class

输入如下内容
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system
---
apiVersion: rbac.authorization./v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kube-system

---
kind: Deployment
apiVersion: apps/v1
metadata:
  name: nfs-provisioner
  namespace: kube-system
spec:
  replicas: 1
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: nfs-provisioner
  template:
    metadata:
      labels:
        app: nfs-provisioner
    spec:
      serviceAccount: admin-user
      containers:
        - name: nfs-provisioner
          image: registry.cn-beijing./mydlq/nfs-subdir-external-provisioner:v4.0.0
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: nfs.k8sdata                        # 和后文中的provisioner保持一致
            - name: NFS_SERVER
              value: 192.168.100.136                # nfs服务器的ip
            - name: NFS_PATH
              value: /nfsshare                            # nfs路径
      volumes:
        - name: nfs-client-root
          nfs:
            server: 192.168.100.136                # nfs服务器的ip
            path: /nfsshare                              # nfs路径

---
apiVersion: storage./v1
kind: StorageClass
metadata:
  name: arcgis-storage-default                # storage class的名字
  labels:
    addonmanager./mode: Reconcile
provisioner: nfs.k8sdata
reclaimPolicy: Retain

上面的nfs路径和IP请根据个人的情况修改

修改 nfs 服务器的 IP 和共享路径后

把上述文本复制到新建的 rancher-nfs-local.yaml 中(或者任何名称)

/# 创建 存储类

kubectl apply -f rancher-nfs-local.yaml

验证pvc是否可以创建成功

点击PersistentVolumeClaims->Create,验证pvc是否可以创建成功。

状态未 Bound 表示创建成功

10.正式创建组织

打开 https://master域名/arcgis/manager开始配置

打开 https://masterIP/arcgis/manager开始配置

配置存储:使用动态存储类型,存储类名称,使用前面步骤创建的存储类名称 arcgis-storage-default。其他默认。

关于 ArcGIS Enterprise on Kubernetes 的镜像安装包哪里有下载,可以联系易智瑞或者 ESRI 官网看看如何获得.https://enterprise-k8s./zh-cn/10.9.1/introduction/what-is-arcgis-enterprise-kubernetes.htm

文章较为复杂繁琐,涉及计 Linux、Docker 等相关基础知识。建议收藏起来慢慢看。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多