Kubesphere 2.1.1 安装部署(All-in-One)

KubeSphere 是在 Kubernetes 之上构建的以应用为中心的多租户容器平台,提供全栈的 IT 自动化运维的能力,简化企业的 DevOps 工作流。KubeSphere 提供了运维友好的向导式操作界面,帮助企业快速构建一个强大和功能丰富的容器云平台。

好的,以上是官方介绍,下面我们来看看如何快速进行 KubeSphere 的搭建吧。😜

1. 安装 docker-ce 和依赖程序组件

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup;
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo;
curl -o /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo;
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo;
sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo;
yum makecache fast;
yum install -y epel-release;
yum remove docker docker-common docker-selinux docker-engine;
yum install -y yum-utils device-mapper-persistent-data lvm2 wget git ansible ntp docker-ce;
systemctl start docker;
systemctl enable docker;

2. 下载依赖的镜像

curl -L https://kubesphere.io/download/images/latest > kubesphere-images-v2.1.1.tar.gz;
tar -zvxf kubesphere-images-v2.1.1.tar.gz;

3. 加载依赖的镜像到本地仓库

cd kubesphere-images-v2.1.1;
docker load < ks_minimal_images.tar;
docker load < openpitrix_images.tar;
docker load < ks_logging_images.tar;
docker load < ks_devops_images.tar;
docker load < istio_images.tar;
docker load < ks_notification_images.tar;
docker load < example_images.tar;

4. 关闭 SElinux 和 firewalld

setenforce 0;
vi /etc/selinux/config;

#### 更改内容 ####
...
SELINUX=disabled
...
#### 更改内容 ####

systemctl stop firewalld;
systemctl disable firewalld;

5. 安装 Kubesphere

下载并解压

curl -L https://kubesphere.io/download/stable/v2.1.1 > kubesphere_installer.tar.gz;
tar -zvxf kubesphere_installer.tar.gz;

修改配置文件

cd kubesphere-all-v2.1.1/conf;
vi common.yaml;

#### 修改内容 ####
...
## Add other registry.
docker_registry_mirrors:
  - https://hub-mirror.c.163.com
  - https://docker.mirrors.ustc.edu.cn
  - https://reg-mirror.qiniu.com
  - https://dockerhub.azk8s.cn
  ...
#### 修改内容 ####

## 更多配置请参考
https://kubesphere.io/docs/zh-CN/installation/complete-installation/

执行安装

cd kubesphere-all-v2.1.1/scripts/;
./install.sh;

## 注意:安装路径不允许有空格!
## All-in-One 安装选择 1 

安装完成

出现以下提示即表示安装完成,其中包含访问地址和帐号密码:

The ks-installer is running
#####################################################
###              Welcome to KubeSphere!           ###
#####################################################

Console: http://10.147.102.99:30880
Account: admin
Password: P@88w0rd

NOTES:
  1. After logging into the console, please check the
     monitoring status of service components in
     the "Cluster Status". If the service is not
     ready, please wait patiently. You can start
     to use when all components are ready.
  2. Please modify the default password after login.

#####################################################

NOTE:

Verify the installation logs and result:

   kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath={.items[0].metadata.name}) -f

由于帐号密码不是随机的,首次登入后强烈建议更新!

界面预览

Kubesphere

6. 接入 OpenLDAP

编辑并执行接入脚本

新建 connect_ldap.sh 脚本,根据自身环境编辑以下内容:

set -e

host="10.147.117.121:389"    # 将 host 的值改为实际的服务器 IP 与 端口
managerDN="cn=admin,dc=test,dc=com"  # 值修改为实际的 AD 域的管理账号, 可以为只读账号
managerPWD="123_admin"    #  管理账号密码
userSearchBase="dc=test,dc=com"   # 根据实际配置进行修改
sidecar="kubespheredev/ad-sidecar:v0.0.1"

generate_config() {
cat << EOF
apiVersion: v1
data:
  sync.yaml: |
    sync:
      interval: "300s"
    src:
      host: "${host}"
      managerDN: "${managerDN}"
      managerPWD: "${managerPWD}"
      userSearchBase: "${userSearchBase}"
      usernameAttribute: "uid"
      descriptionAttribute: "displayName"
      mailAttribute: "mail"
    dst:
      host: "openldap.kubesphere-system.svc:389"
      managerDN: "cn=admin,dc=kubesphere,dc=io"
      managerPWD: "admin"
      userSearchBase: "ou=Users,dc=kubesphere,dc=io"
kind: ConfigMap
metadata:
  name: ad-sync-config
  namespace: kubesphere-system
EOF
}

# apply sync config
generate_config | kubectl apply -f -

# inject sidecar
kubectl -n kubesphere-system get deploy ks-account -o json | jq '.spec.template.spec.volumes += [{"configMap":{"name":"ad-sync-config"},"name":"ad-sync-config"}]' | jq '.spec.template.spec.containers += [{"command":["ad-sidecar","--logtostderr=true","--v=2"],"image":"'${sidecar}'","imagePullPolicy":"IfNotPresent","name":"ad-sidecar","ports":[{"containerPort":19090,"protocol":"TCP"}],"volumeMounts":[{"mountPath":"/etc/kubesphere/sync.yaml","name":"ad-sync-config","subPath":"sync.yaml"}]}]' | kubectl apply -f -

# use proxy port
kubectl -n kubesphere-system get svc ks-account -o json | jq '.spec.ports[0].targetPort=19090' | kubectl apply -f -

其中以下对应关系要注意按实际 LDAP 中的标签来写,当时我直接用默认模版,用户无法导入,研究了好半天:

usernameAttribute: "uid"
descriptionAttribute: "displayName"
mailAttribute: "mail"

脚本新建完后,使用 bash connect_ldap.sh 执行,出现以下提示即为执行成功:

[root@ks-allinone Kubeshere_install]# bash connect_ldap.sh 
configmap/ad-sync-config configured
deployment.apps/ks-account configured
service/ks-account configured

该脚本会重启 ks-account 的 Pod,会有短暂几分钟账号无法登陆。待 ks-account 的 pod 就绪后, 登录 KubeSphere 可以看到 AD 中的账户数据。

用户管理

常见问题

若执行脚本后,迟迟无法登录,登录界面出现“无法访问后端服务”,如图:

无法访问后端服务

可按以下步骤进行分析:

  1. 检查 ks-account 服务是否正常

    执行 kubectl get pod -n kubesphere-system 命令,查看 ks-account 里的容器运行是否正常:

    ks-account

    如果如上图所示,若 ks-account 处于 CrashLoopBackOff 状态,无法正常启动的话,则先检查 connect_ldap.sh 脚本中的 LDAP 配置是否正确,是否能正常连接。如果配置不正确,则修改后重新执行脚本;如果配置正确,则进行下一步。

  2. 检查 LDAP 配置是否正常写入

    执行 kubectl -n kubesphere-system get cm ad-sync-config -o yaml 命令,查看 ad-sync-config 配置写入是否正确:

    ad-sync-config

    如图,若配置无误,则进行下一步。

  3. 检查 ad-sidecar 日志是否正常

    执行 kubectl -n kubesphere-system logs --tail=10 ks-account-7889cc9d56-kh6jg -c ad-sidecar 查看 ad-sidecar 日志。

    注意,ks-account-7889cc9d56-kh6jg 需改成使用 kubectl get pod -n kubesphere-system 命令查找出来的名称,我这里是修复后的日志,所以名称不一样。如果嫌日志太少,可将 --tail=10 的参数调大

    ad-sidecar

    正常的日志,仅作参考。

  4. 如果以上步骤还找不出问题,则可通过修改 ad-sidecar 日志等级并使其强制重启

    执行 kubectl -n kubesphere-system edit deploy ks-account,修改以下配置:

    Command:
    ad-sidecar
    –logtostderr=true
    –v=6

    保存后待其重启,再查看日志分析原因即可。

专题:Kubernetes