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 socat
apt install conntrack
apt 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