KubeSphere 容器平台
使用建议
- 适合无状态服务的快速、标准化部署;不适合有状态的服务
- 新版3.2.0存在api不兼容问题,建议使用3.1.1
- 可以导入多种云主机(基于代理)
- 自带监控(基于prometheus)和日志采集(elk),适合标准化监控快速落地
- 自带基于jenkeins的流水线,如果用标准流程较方便,但要自定义模块较麻烦
- 有api,更适用基于helm的gitops
安装
linux上单节点all-in-one
基于ubuntu 18环境测试,硬件配置4C-8G-100G
- 安装容器runtime
apt install docker.io - 确认dns可用
nslookup www.baidu.com,反馈实际Address代表正常 - 关闭防火墙
ufw disable - 可选:添加阿里云容器镜像服务/镜像加速器
- 安装依赖组件
apt install socatapt install conntrackapt install ipset -y- 指定环境参数
export KKZONE=cn,下载kkcurl -sfL https://get-kk.kubesphere.io | VERSION=v1.2.0 sh - chmod +x kk后执行安装./kk create cluster --with-kubernetes v1.21.5 --with-kubesphere v3.2.0
,
- 安装验证
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f,
- 第一次登入会要求改admin密码
- admin访问管理界面,

启用插件
DevOps系统
- 以
admin用户访问平台管理-集群管理-CRD页面,搜索clusterconfiguration
- 进入详情页,
编辑 YAML
- 改
spec.devops.enabled为true,并确定保存 - 等待几分钟,集群组件会重启,验证安装结果
kubectl get pod -n kubesphere-devops-system

Istio服务网格
[TODO]
使用
创建企业空间、项目、用户和角色
创建用户
平台管理-访问控制-用户,创建新用户管理员
- 依次新增用户
企业空间管理员(ws-manager)、普通项目用户(project-regular)等
创建企业空间
- 以
ws-manager身份登录,进入企业空间,创建新空间demo-workspace,指定普通用户ws-admin为该空间管理员 - 以
ws-admin登入,邀请普通用户project-admin和project-regular进入该空间,并授权
创建项目(等同NameSpace)
- 以
project-admin登入,进入项目,点创建新项目demo-project
- 点击进入项目详情,设置资源限制

- 注意 1Gi == 1024MiB; 1G == 1000MB
- 邀请已有用户为项目成员
- 在
网关设置创建NodePort模式的网关,供外部访问
项目部署
以简单的dockerbogo/docker-nginx-hello-world为例
- 创建应用:
应用负载-应用-自制应用中创建新应用nginx-hello-world
,
- 下一步创建
无状态服务
,
,
- 向导
容器镜像中,点击添加容器镜像,搜索dockerbogo/docker-nginx-hello-world,点使用默认端口
- 注意:资源需要限制,不能大于项目自身配额

- 下一步
添加存储卷忽略 - 在
高级设置右下方点创建,完成向导 - 最后点击
下一步
路由设置中,点击创建,使用默认规则工作负载页下验证服务
- 通过 NodePort 访问

- 选择
,并确定 - 进入服务详情页,可以看见暴露的端口

- 访问效果

DevOps管理(CI/CD)
前提:
- 已有用户
project-admin,具有admin或operator角色
凭证管理
- 添加git账号
gitlab-id,用于读源码repo
- 类似上文,添加docker镜像库账号
dockerhub-id,用于推送镜像 - 添加kubeconfig类账号
demo-kubeconfig,用于部署资源
- 以上账号要用于应用repo根目录的
Jenkinsfile
建立流水线
- 进
流水线点创建,输入自定义名称后,选择代码仓库
- 选
Git,填入应用所在git地址,并选择之前创建的git账号凭证,点勾保存
- (可选)点
下一步,在高级设置中配置正则过滤、Webhook和定时扫描等
- 点
创建完成向导
- 进入流水线详情页的
分支,扫描仓库,如果git账号正确的话,会读取符合正则过滤条件的分支信息,自动开始第一次构建(多半以失败告终)
- 进入流水线详情页的
运行记录,点击记录进入详情页
- 可以点
查看日志定位问题
- 不断调整
Jenkinsfile,直到流水线正常运行。
pipeline {
agent {
node {
label 'base'
}
}
environment {
DOCKER_CREDENTIAL_ID = 'dockerhub-id'
KUBECONFIG_CREDENTIAL_ID = 'demo-kubeconfig'
REGISTRY = 'docker.io'
DOCKERHUB_NAMESPACE = 'devops'
APP_NAME = 'devops-python-sample'
}
parameters {
string(name: 'BRANCH_NAME', defaultValue: 'master', description: '')
}
stages {
stage('拉取代码') {
steps {
checkout(scm)
}
}
stage('推送镜像') {
steps {
container('base') {
withCredentials([usernamePassword(credentialsId : "$DOCKER_CREDENTIAL_ID" ,passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,)]) {
sh 'echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERNAME" --password-stdin'
sh 'docker build -f Dockerfile -t $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:$BUILD_NUMBER .'
sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:$BUILD_NUMBER'
}
}
}
}
stage('部署') {
steps {
kubernetesDeploy(configs: 'deploy/**', enableConfigSubstitution: true, kubeconfigId: "$KUBECONFIG_CREDENTIAL_ID")
}
}
}
}
API使用
[TODO]
踩坑记录
- 尽量不要跑有状态的服务,非常危险:有时候db类应用一旦挂了,数据很难恢复一致;另外v3.2.0的前端js有bug,有状态的服务详情页报错
- v3.2.0对应的k8s默认api升级,导致相关部署插件过期不可用,参考
https://github.com/kubesphere/website/issues/2096