腾讯云部署Eclipse Che(云原生IDE)

准备工作

  • 已经创建了一个腾讯云容器服务集群
  • 配置好kubectl客户端
  • 已经有一个腾讯云(DNSPod)解析的域名

安装chectl

$ bash <(curl -sL  https://www.eclipse.org/che/chectl/)

安装NGINX Ingress Controller

详细安装过程见:https://kubernetes.github.io/ingress-nginx/deploy/

这里需要注意的是是controller使用的镜像地址国内无法访问,需要换成你自己的镜像地址,可以将镜像翻墙下载,然后上传到腾讯云容器服务的镜像仓库里。

安装cert-manager

cert-manager是原生的Kubernetes证书管理控制器。 它可以帮助从各种证书机构颁发证书,例如Let's Encrypt,HashiCorp Vault,Venafi,简单的签名密钥对或生成自签名证书。

它将确保证书有效并且是最新的,并在到期前尝试在配置的时间续订证书。

# Kubernetes 1.16+
$ kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v1.0.2/cert-manager.yaml

# Kubernetes <1.16
$ kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v1.0.2/cert-manager-legacy.yaml

本文只要确保会使用即可,有时间再详细介绍一下cert-manager

安装dnspod webhook

申请dnspod的api调用凭证

在安装dnspod webhook之前,需要新申请dnspod调用api接口的id和和token,首先登陆dnspod管理控制台(使用腾讯云账号即可登陆),如下图所示:

dnspodconsole.jpg

进入“密钥管理”页面,点击“创建密钥”。

keymanager.jpg

在创建“创建密钥”页面,输入密钥名称,点击“确定”即可。

createkey.jpg

创建成功后,如下图所示:

createkeysuccess.jpg

复制保存ID和Token、复制保存ID和Token、复制保存ID和Token,后面将用到。

安装dnspod webhook

下载代码:

$ git clone https://github.com/qqshfox/cert-manager-webhook-dnspod.git

使用helm安装:

$ cd cert-manager-webhook-dnspod
$ helm install --name cert-manager-webhook-dnspod ./deploy/cert-manager-webhook-dnspod \
    --namespace <NAMESPACE-WHICH-CERT-MANAGER-INSTALLED> \
    --set groupName=<GROUP_NAME> \
    --set secrets.apiID=<DNSPOD_API_ID>,secrets.apiToken=<DNSPOD_API_TOKEN> \
    --set clusterIssuer.enabled=true,clusterIssuer.email=<EMAIL_ADDRESS>

注意:上面的命令中中,namespace配置为che,GROUP_NAME建议使用acme.xxx.com这样的唯一标识即可,DNSPOD_API_ID和DNSPOD_API_TOKEN为上一步申请的api调用凭证,EMAIL_ADDRESS配置为您常用地址即可,在证书过期的时候会发送提醒之类到这个邮箱地址。

安装完后,webhook将自动帮您创建一个cluster issuer,如下所示:

[root@VM_0_10_centos cheworkspace]# kubectl get clusterissuer
NAME                                         READY   AGE
cert-manager-webhook-dnspod-cluster-issuer   True    14h

查看yaml格式,如下:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  ……
  name: cert-manager-webhook-dnspod-cluster-issuer
  ……
spec:
  acme:
    email: zhcj11118@126.com
    preferredChain: ""
    privateKeySecretRef:
      name: cert-manager-webhook-dnspod-letsencrypt
    server: https://acme-v02.api.letsencrypt.org/directory
    solvers:
    - dns01:
        webhook:
          config:
            apiID: 184422
            apiTokenSecretRef:
              key: api-token
              name: cert-manager-webhook-dnspod-secret
          groupName: acme.venusource.com
          solverName: dnspod

申请ssl证书

eclipse che要求使用一个泛域名来自动配置相关的服务及实现多租户模式,我们需要解析一个*.xxx.xxx.cn这样的域名到nginx controller,所以cert-manager申请证书时,必须使用dns01方式认证域名所有权,HTTP方式不支持泛域名的所有权认证。请确保您在腾讯云申请了相关了域名。

新建文件che-certificate.yaml,内容如下:

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: che-certificate
  namespace: che
spec:
  dnsNames:
    - 'ide.gwunion.cn'
    - '*.ide.gwunion.cn'
  secretName: che-tls
  issuerRef:
    name: cert-manager-webhook-dnspod-cluster-issuer
    kind: ClusterIssuer

系统将调用letsencrypt的acme的接口为我们的域名申请证书。

注意:这里的secretName必须为che-tls,chectl在安装时会检查,如果有有che-tls这个secret就不在自动创建一个自签名的证书,直接使用che-tls。

执行下面的命令查看证书申请情况

kubectl describe Certificate che-certificate -n che

等待通过dns方式对域名进行所有权认证,一段1-2分钟内证书就申请完毕,并保存到名称为che-tls的secret内。

安装eclipse che

安装之前,请确保您使用的域名*.xxx.xxx.com已经解析到ingress nginx controller的IP地址,查看IP地址可执行下面的命令查看:

kubectl get services --namespace ingress-nginx

IP地址为EXTERNAL-IP字段,请在腾讯云域名解析控制台或dnspod域名解析控制台解析*.xxx.xxx.com的A记录到EXTERNAL-IP。

$ chectl server:start -a helm -b ide.gwunion.cn -p k8s --multiuser --k8spodreadytimeout=13000000 --k8spodwaittimeout=30000000
› Current Kubernetes context: 'cls-8437x8wt-context-default'
  ✔ Verify Kubernetes API...OK
  ✔ 👀  Looking for an already existing Eclipse Che instance
    ✔ Verify if Eclipse Che is deployed into namespace "che"...it is not
  ✔ ✈️  Kubernetes preflight checklist
    ✔ Verify if kubectl is installed
    ✔ Verify remote kubernetes status...done.
    ✔ Check Kubernetes version: Found v1.18.4-tke.2.
    ✔ Verify domain is set...set to ide.gwunion.cn.
    ↓ Check if cluster accessible [skipped]
  ✔ Start following logs
    ↓ Start following Operator logs [skipped]
    ✔ Start following Eclipse Che logs...done
    ✔ Start following Postgres logs...done
    ✔ Start following Keycloak logs...done
    ✔ Start following Plugin registry logs...done
    ✔ Start following Devfile registry logs...done
  ✔ Start following events
    ✔ Start following namespace events...done
 ›   Warning: Consider using the more reliable 'OLM' installer when deploying a stable release of Eclipse Che (--installer=olm).
  ✔ 🏃‍  Running Helm to install Eclipse Che
    ✔ Verify if helm is installed
    ✔ Check Helm Version: Found v3.3.1+g249e521
    ✔ Create Namespace (che)...does already exist.
    ✔ Check Eclipse Che TLS certificate...TLS certificate secret found
    ✔ Check Cluster Role Binding...done.
    ✔ Preparing Eclipse Che Helm Chart...done.
    ✔ Updating Helm Chart dependencies...done.
    ✔ Deploying Eclipse Che Helm Chart...done.
  ✔ ✅  Post installation checklist
    ✔ PostgreSQL pod bootstrap
      ✔ scheduling...done.
      ✔ downloading images...done.
      ✔ starting...done.
    ✔ Devfile registry pod bootstrap
      ✔ scheduling...done.
      ✔ downloading images...done.
      ✔ starting...done.
    ✔ Plugin registry pod bootstrap
      ✔ scheduling...done.
      ✔ downloading images...done.
      ✔ starting...done.
    ✔ Eclipse Che pod bootstrap
      ✔ scheduling...done.
      ✔ downloading images...done.
      ✔ starting...done.
    ✔ Retrieving Eclipse Che server URL... https://che-che.ide.gwunion.cn
    ✔ Eclipse Che status check
  ✔ Show important messages
    ✔ Autogenerated Keycloak credentials are: "admin:iZ245VK5RUHV"
Command server:start has completed successfully.

这里简单说明一下chectl几个参数:

  • -a helm 为安装方式使用helm chart
  • -b ide.gwunion.cn 为eclipse che使用的访问域名
  • -p k8s 安装平台为独立安装的k8s平台
  • --multiuser 支持多用户
  • --k8spodreadytimeout=13000000 等待pod为ready状态的超时时长
  • --k8spodwaittimeout=30000000 等待pod启动的超时时长,为什么要配置那么长时间,主要是由于国内网络状态太差,拉取镜像的时间较长,所以越大越好。

安装完成后,即可通过 https://che-che.xxx.com访问您的eclipse che云开发ide环境了,如下图所示:

chelogin.jpg

首次需要注册用户,然后登陆控制台即可,让您的团队尽情的享用云原生IDE吧。

chedashboard.jpg
cheide.jpg

以后不用给你的团队配笔记本电脑了,人手一个ipad,性能可按需配置,就像下面这样:

ipadworkstation.jpg

后续的优化提升

由于目前平台所有镜像都使用国外的镜像,下载速度较慢,建议在生产环境使用将镜像本地化,可以使用腾讯云的容器镜像服务

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,711评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,079评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,194评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,089评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,197评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,306评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,338评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,119评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,541评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,846评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,014评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,694评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,322评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,026评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,257评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,863评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,895评论 2 351