KubeSphere 容器平台

使用建议

  1. 适合无状态服务的快速、标准化部署;不适合有状态的服务
  2. 新版3.2.0存在api不兼容问题,建议使用3.1.1
  3. 可以导入多种云主机(基于代理)
  4. 自带监控(基于prometheus)和日志采集(elk),适合标准化监控快速落地
  5. 自带基于jenkeins的流水线,如果用标准流程较方便,但要自定义模块较麻烦
  6. 有api,更适用基于helm的gitops

安装

linux上单节点all-in-one

基于ubuntu 18环境测试,硬件配置4C-8G-100G

  1. 安装容器runtime apt install docker.io
  2. 确认dns可用 nslookup www.baidu.com,反馈实际Address代表正常
  3. 关闭防火墙 ufw disable
  4. 可选:添加阿里云容器镜像服务/镜像加速器
  5. 安装依赖组件
  6. apt install socat
  7. apt install conntrack
  8. apt install ipset -y
  9. 指定环境参数export KKZONE=cn,下载kkcurl -sfL https://get-kk.kubesphere.io | VERSION=v1.2.0 sh -
  10. chmod +x kk后执行安装./kk create cluster --with-kubernetes v1.21.5 --with-kubesphere v3.2.0 ks_install安装完成
  11. 安装验证kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f验证
  12. 第一次登入会要求改admin密码
  13. admin访问管理界面,web界面

启用插件

DevOps系统

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

Istio服务网格

[TODO]

使用

创建企业空间、项目、用户和角色

创建用户

  1. 平台管理-访问控制-用户创建新用户管理员 add_user
  2. 依次新增用户企业空间管理员(ws-manager)普通项目用户(project-regular)

创建企业空间

  1. ws-manager身份登录,进入企业空间创建新空间demo-workspace,指定普通用户ws-admin为该空间管理员
  2. ws-admin登入,邀请普通用户project-adminproject-regular进入该空间,并授权 空间邀请用户

创建项目(等同NameSpace)

  1. project-admin登入,进入项目,点创建新项目demo-project 新项目
  2. 点击进入项目详情,设置资源限制 ks_demo_limit
  3. 注意 1Gi == 1024MiB; 1G == 1000MB
  4. 邀请已有用户为项目成员
  5. 网关设置创建NodePort模式的网关,供外部访问 ks_demo_gateway

项目部署

以简单的dockerbogo/docker-nginx-hello-world为例

  1. 创建应用:应用负载-应用-自制应用中创建新应用nginx-hello-world 新建自制应用基本信息
  2. 下一步创建无状态服务添加服务无状态服务app服务
  3. 向导容器镜像中,点击添加容器镜像,搜索dockerbogo/docker-nginx-hello-world,点使用默认端口 appname-2.jpg
  4. 注意:资源需要限制,不能大于项目自身配额 配额
  5. 下一步添加存储卷忽略
  6. 高级设置右下方点创建,完成向导
  7. 最后点击下一步 appname-3.jpg
  8. 路由设置中,点击创建,使用默认规则
  9. 工作负载页下验证服务 appname-4.jpg
  10. 通过 NodePort 访问 appname-5.jpg
  11. 选择 access-method.png,并确定
  12. 进入服务详情页,可以看见暴露的端口 appname-6.jpg
  13. 访问效果 appname-over.jpg

DevOps管理(CI/CD)

前提:

凭证管理

建立流水线

  1. 流水线创建,输入自定义名称后,选择代码仓库 ks-devops-4.jpg
  2. Git,填入应用所在git地址,并选择之前创建的git账号凭证,点勾保存 ks-devops-5.jpg
  3. (可选)点下一步,在高级设置中配置正则过滤Webhook定时扫描ks-devops-6.jpg
  4. 创建完成向导 ks-devops-7.jpg
  5. 进入流水线详情页的分支,扫描仓库,如果git账号正确的话,会读取符合正则过滤条件的分支信息,自动开始第一次构建(多半以失败告终) ks-devops-8.jpg
  6. 进入流水线详情页的运行记录,点击记录进入详情页 ks-devops-9.jpg
  7. 可以点查看日志定位问题 ks-devops-10.jpg
  8. 不断调整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]

踩坑记录

参考