华为k8s云容器化部署

容器化部署搭建

CI/CD流程图

image

华为云k8s集群搭建

第一步:购买k8s集群及对应的work节点(配置可以参考uat环境的配置参数)
image

环境清单列表

字段名类型配置备注
云容器引擎包年包月虚拟机集群(高可用)1-50节点open-dev k8s集群
弹性云服务器包年包月内存优化型-m3.large.8-2vCPUs-16GB-linux高IO-40GB高IO-100GBk8s集群节点
关系型数据库包年包月数据库引擎MySQL 5.7-存储空间超高IO,100GB数据库
弹性公网IP包年包月带宽大小 (Mbit/s) 5数据库连接公网IP
弹性公网IP包年包月带宽大小 (Mbit/s) 5自动化应用部署访问公网IP
对象存储服务包年包月100GB、公网下行流量包 100GB、CDN回源流量1TB,3AZ存储包100GBOSS文件服务器
云服务器包年包月内存优化型-m3.large.8-4vCPUs-8GB-linux高IO-40GB高IO-100GBjenkins部署
NAT网关按需集群网络通信

CI/CD环境搭建步骤

一、jenkins部署

copy文件到linux服务器

启动命令:nohup java -jar jenkins.war &

访问地址

http://ip:8080

设置登录密码

编写脚本

流水线脚本备注

#!groovy

pipeline {
    agent any
    
    environment{
        REPOSITORY="[gitlab代码仓库地址]"
        BRANCH="[分支]"
        MODULE="[pod名称/容器镜像名称]" #k8s集群内pod名称和容器名称保持一致(用户更新服务)
        SCRIPT_DIR="/production/file" #服务器docker构建脚本执行脚本地址-newbuild.sh(文档下方有脚本)
        ENV="[集群命名空间]" #k8s的集群命名空间
        PROFILE="/home/kubeconfig.json" #服务器k8s客户端kubectl执行脚本地址-deploy.sh(下方有脚本)
    }
    
    stages{
        stage('GitLab拉取代码') {
            steps{
                 echo"git pull from ${REPOSITORY}"
                 git branch: "${BRANCH}", credentialsId: '76ed55e0-9507-43b3-896f-7f0d25e03e89', url: "${REPOSITORY}"
            }
        }
        stage ("静态代码检查") {
            steps {
                echo "start code check"
            }
        }
        stage('Gradle构建') {
            steps{
                 echo"gradle build"
                 sh "gradle clean build -x test"
            }
        }
        stage('Docker构建镜像') {
            steps{
                 echo"docker image"
                 sh "${SCRIPT_DIR}/newbuild.sh ${MODULE} ${ENV} ${BUILD_NUMBER}"
            }
        }  
        stage('更新服务') {
            steps {
                echo "update service "
                sh "${SCRIPT_DIR}/deploy.sh ${MODULE} ${ENV} ${PROFILE} ${BUILD_NUMBER}"
            }
        }  
    }
}

二、linux 环境下安装git

yum安装

yum install -y git

配置拉取代码授权

设置用户名和email

git config --global user.name "xxxxx"
git config --global user.email "xxxx@qq.com"

生成ssh key

ssh-keygen -t rsa -C "xxxx@qq.com"

jenkins拉取代码的脚本

#!groovy

pipeline {
    agent any
    
    environment{
        REPOSITORY="[gitlab代码仓库地址]"
        BRANCH="[分支]"
        MODULE="[pod名称/容器镜像名称]" #k8s集群内pod名称和容器名称保持一致(用户更新服务)
        SCRIPT_DIR="/production/file" #服务器docker构建脚本执行脚本地址-newbuild.sh(文档下方有脚本)
        ENV="[集群命名空间]" #k8s的集群命名空间
        PROFILE="/home/kubeconfig.json" #服务器k8s客户端kubectl执行脚本地址-deploy.sh(下方有脚本)
    }
    
    stages{
        stage('npm构建') {
            steps{
                 echo"npm build"
                 sh "npm install;npm run build"
            }
        }
}
三、安装GitBook(用户构建开放平台的OpenApi文档)

构建服务器上安装Gitbook

npm install gitbook-cli

jenkinsGitbook构建脚本

#!groovy

pipeline {
    agent any
    
    environment{
        REPOSITORY="[gitlab代码仓库地址]"
        BRANCH="[分支]"
        MODULE="[pod名称/容器镜像名称]" #k8s集群内pod名称和容器名称保持一致(用户更新服务)
        SCRIPT_DIR="/production/file" #服务器docker构建脚本执行脚本地址-newbuild.sh(文档下方有脚本)
        ENV="[集群命名空间]" #k8s的集群命名空间
        PROFILE="/home/kubeconfig.json" #服务器k8s客户端kubectl执行脚本地址-deploy.sh(下方有脚本)
    }
    
    stages{
        stage('gitbook构建') {
            steps{
                 echo"gitbook build"
                 sh "gitbook install;gitbook build;"
            }
        }
    }
}
四、Jenkisn-nodejs构建环境/yarn前端构建环境
nodejs构建环境

下载linuxgradle包

wget https://nodejs.org/dist/v9.8.0/node-v9.8.0-linux-x64.tar.xz

解压安装包

xz -d node-v9.8.0-linux-x64.tar.xz
tar -xvf node-v9.8.0-linux-x64.tar

进入目录下

cd [文件名]

配置软链接

ln -s /opt/nodejs/node-v9.8.0-linux-x64/bin/node /usr/local/bin/node
ln -s /opt/nodejs/node-v9.8.0-linux-x64/bin/npm /usr/local/bin/npm

验证是否成功

node -v
npm -v

jenkins-nodejs构建脚本

#!groovy

pipeline {
    agent any
    
    environment{
        REPOSITORY="[gitlab代码仓库地址]"
        BRANCH="[分支]"
        MODULE="[pod名称/容器镜像名称]" #k8s集群内pod名称和容器名称保持一致(用户更新服务)
        SCRIPT_DIR="/production/file" #服务器docker构建脚本执行脚本地址-newbuild.sh(文档下方有脚本)
        ENV="[集群命名空间]" #k8s的集群命名空间
        PROFILE="/home/kubeconfig.json" #服务器k8s客户端kubectl执行脚本地址-deploy.sh(下方有脚本)
    }
    
    stages{
        stage('npm构建') {
            steps{
                 echo"npm build"
                 sh "npm build;npm run build"
            }
        }
    }
}
yarn构建环境安装
curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo

yum install -y yarn

jenkins-yarn构建脚本

#!groovy

pipeline {
    agent any
    
    environment{
        REPOSITORY="[gitlab代码仓库地址]"
        BRANCH="[分支]"
        MODULE="[pod名称/容器镜像名称]" #k8s集群内pod名称和容器名称保持一致(用户更新服务)
        SCRIPT_DIR="/production/file" #服务器docker构建脚本执行脚本地址-newbuild.sh(文档下方有脚本)
        ENV="[集群命名空间]" #k8s的集群命名空间
        PROFILE="/home/kubeconfig.json" #服务器k8s客户端kubectl执行脚本地址-deploy.sh(下方有脚本)
    }
    
    stages{
        stage('yarn 构建') {
            steps{
                 echo"yarn build"
                 sh "yarn;npm run build"
            }
        }
    }
}
五、Jenkisn-Gradle构建环境搭建

用wget下载

wget https://downloads.gradle.org/distributions/gradle-3.2.1-all.zip

解压文件

unzip [文件名]

修改环境变量

vim /etc/profile

放到文件最后

PATH=$PATH:/opt/gradle/gradle-3.5/bin
export PATH

刷新环境

source /etc/profile

验证是否生效

gradle -v

jenkins-Gradle构建脚本

#!groovy

pipeline {
    agent any
    
    environment{
        REPOSITORY="[gitlab代码仓库地址]"
        BRANCH="[分支]"
        MODULE="[pod名称/容器镜像名称]" #k8s集群内pod名称和容器名称保持一致(用户更新服务)
        SCRIPT_DIR="/production/file" #服务器docker构建脚本执行脚本地址-newbuild.sh(文档下方有脚本)
        ENV="[集群命名空间]" #k8s的集群命名空间
        PROFILE="/home/kubeconfig.json" #服务器k8s客户端kubectl执行脚本地址-deploy.sh(下方有脚本)
    }
    
    stages{
        stage('Gradle构建') {
            steps{
                 echo"gradle build"
                 sh "gradle clean build -x test"
            }
        }
    }
}
六、Jenkisn-Docker构建环境搭建

docker安装
安装一些必要的系统工具:

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

添加软件源信息:

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新 yum 缓存:

sudo yum makecache fast

安装 Docker-ce:

sudo yum -y install docker-ce

启动 Docker 后台服务:

sudo systemctl start docker

docker链接远程仓库

首先登录

greentown账户的密钥

秘钥Id(AK)

2LBNTxxxRVXKUSURGS11

秘钥(SK)

Eea3or111XCYBO2225CPUj2DN7tRbx2222vRqc

配置秘钥(在Linux服务器上输入此命令)

printf "2LBNTxxxRVXKUSURGS11" | openssl dgst -binary -sha256 -hmac "Eea3or111XCYBO2225CPUj2DN7tRbx2222vRqc" | od -An -vtx1 | sed 's/[ \n]//g' | sed 'N;s/\n//'

秘钥:851ded7994233H42453233426b2542a31bbcf370bacc82c9404bb45bf3f83ed3

docker login -u [区域项目名]@[AK] -p [登录密钥] [镜像仓库地址]

范例:docker login -u cn-east-3@2LBNTxxxRVXKUSURGS11 -p 851ded7994233H42453233426b2542a31bbcf370bacc82c9404bb45bf3f83ed3 swr.cn-east-3.myhuaweicloud.com

Docker构建镜像

docker build -t [镜像仓库地址][镜像仓库][镜像:版本] -f [docker名字] .

Docker镜像推送

docker push [镜像仓库地址][镜像仓库][镜像:版本]

jenkins-Docker构建脚本

#!groovy

pipeline {
    agent any
    
    environment{
        REPOSITORY="[gitlab代码仓库地址]"
        BRANCH="[分支]"
        MODULE="[pod名称/容器镜像名称]" #k8s集群内pod名称和容器名称保持一致(用户更新服务)
        SCRIPT_DIR="/production/file" #服务器docker构建脚本执行脚本地址-newbuild.sh(文档下方有脚本)
        ENV="[集群命名空间]" #k8s的集群命名空间
        PROFILE="/home/kubeconfig.json" #服务器k8s客户端kubectl执行脚本地址-deploy.sh(下方有脚本)
    }
    
    stages{
        stage('Docker构建镜像') {
            steps{
                 echo"docker image"
                 sh "${SCRIPT_DIR}/newbuild.sh ${MODULE} ${ENV} ${BUILD_NUMBER}"
            }
        }  
    }
}

newbuild.sh脚本

MODULE=$1
ENV=$2
VERSION=$3
DOCKERFILE=$4
#IMAGE_NAME=[区域域名]/[组织]/[镜像名]:[版本]
IMAGE_NAME=swr.cn-east-3.myhuaweicloud.com/greentown/${MODULE}:${VERSION}
if  [ ! -n "${DOCKERFILE}" ] ;then
    docker build -t ${IMAGE_NAME} .
else
    docker build -t ${IMAGE_NAME} -f ${DOCKERFILE}  .
fi

docker push ${IMAGE_NAME}

echo "${IMAGE_NAME}" > IMAGE_NAME

echo "镜像${IMAGE_NAME}生成成功"

七.客户端kubectl安装(华为云CCE集群管理里面有安装步骤说明)

首先下载k8s集群对应的kubectl
把文件放到服务的home路径下

cd /home 
chmod +x kubectl 
mv -f kubectl /usr/local/bin 
mkdir -p $HOME/.kube 
mv -f kubeconfig.json $HOME/.kube/config

根据使用场景,按需切换kubectl的访问模式
VPC网络内接入访问请执行此命令

kubectl config use-context internal

互联网接入访问请执行此命令

kubectl config use-context external

触发更新命令

部署命令(测试)-kubectl 提供多种远程更新镜像的命令

#kubectl --kubeconfig [集群配置文件] set image -n [命名空间] deploy/[pod名称] [容器名]=[新的镜像地址]
kubectl --kubeconfig kubeconfig-dev.json set image -n develop deploy/redis-dev  redis-dev=swr.cn-east-3.myhuaweicloud.com/greentown/redis:V1.0

jenkins-kubectl构建脚本

#!groovy

pipeline {
    agent any
    
    environment{
        REPOSITORY="[gitlab代码仓库地址]"
        BRANCH="[分支]"
        MODULE="[pod名称/容器镜像名称]" #k8s集群内pod名称和容器名称保持一致(用户更新服务)
        SCRIPT_DIR="/production/file" #服务器docker构建脚本执行脚本地址-newbuild.sh(文档下方有脚本)
        ENV="[集群命名空间]" #k8s的集群命名空间
        PROFILE="/home/kubeconfig.json" #服务器k8s客户端kubectl执行脚本地址-deploy.sh(下方有脚本)
    }
    
    stages{
        stage('更新服务') {
            steps {
                echo "update service "
                sh "${SCRIPT_DIR}/deploy.sh ${MODULE} ${ENV} ${PROFILE} ${BUILD_NUMBER}"
            }
        }   
    }
}

服务更新脚本deploy.sh

MODULE=$1
ENV=$2
PROFILE=$3
IMAGE=swr.cn-east-3.myhuaweicloud.com/greentown/${MODULE}:$4
echo "update image to:${IMAGE}"
#kubectl --kubeconfig [集群配置文件] set image -n [命名空间] deploy/[pod名称] [容器名]=[新的镜像地址]
kubectl --kubeconfig ${PROFILE} set image -n ${ENV} deploy/${MODULE} ${MODULE}=${IMAGE}
kubeconfig.json脚本(不同的k8s集群有不同的配置文件)
{
	"kind": "Config",
	"apiVersion": "v1",
	"preferences": {},
	"clusters": [{
		"name": "internalCluster",
		"cluster": {
			"server": "https://xxx.xxx.xxx.:3233",
			"certificate-authority-data": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMxRENDQWJ5Z0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFiTVJrd0Z3WURWUVFLRXhCRFEwVWcKVkdWamFHNXZiRzluYVdWek1CNFhEVEU1TURneU9EQTFORE15TVZvWERUUTVNRGd5TURBMU5ETXlNVm93R3pFWgpNQmNHQTFVRUNoTVFRME5GSUZSbFkyaHViMnh2WjJsbGN6Q0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQCkFEQ0NBUW9DZ2dFQkFPZldkV3FxYVFuZXVWTVc1TDUwU0h1azYwOXFZdGkzZFNHMk1va0VXaXZvdnRXaHRabFcKbE1LVDhpVEZQTTFXF1ZFBVSHEyc0wKdEhZWGZjbjNsenNmTmNDeDhSZGg0bXd0eDFqaGwwSHBOZStDM1ZxcU1IK2pScFhlcS9KRGlKN056MEh1OWVxQQozV2JsKzJ6WE5WdSt6SE05QnBPS29qbzIyWFFQcllMdzRnTWZXVVJwY2lRSzVrQU5NMUZVRy9CZlVFTjhmMHRkCm83MWR5L3A2RDBxYm1seHVzY1RUV3JNczRadGdOVDFONnkya3JjdjAxT1Rva2hWTkpnWGpRN3pqVzk4S1RXaW8KWFE0Y1JQc2R6R2UwZXRzY0d2TWtQU280SHh6WlZDdnNXUFhiSHo5UzJTWnRZbTBmYUdvSHBzRkg1SnpFdDZtZwphSXRPeDN4MlRyY0t4SkVSa2pNQXdlZGM3bmdPVjg3K2RuaFl0S2pCY0h2VXQ3R0dDQnhRY3ZVTW9WL2MrYzBiCjBBSW9qa1h5ODdnPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg=="
		}
	}],
	"users": [{
		"name": "user",
		"user": {
			"client-certificate-data": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUQrVENDQXVHZ0F3SUJBZ0lJQVdWOVpxeGNkS2N3RFFZSktvWklodmNOQVFFTEJRQXdHekVaTUJjR0ExVUUKQ2hNUVEwTkZJRlJsWTJodWIyeHZaMmxsY3pBZUZ3MHhPVEE0TWpnd05UUXpNakZhRncwME9UQTRNakF3TlRRegpNak5hTURJeEZ6QVZCZ05WQkFvVERuTjVjM1JsYlRwdFlYTjBaWEp6TVJjd0ZRWURWUVFERXc1emVYTjBaVzA2CmJXRnpkR1Z5Y3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBT2ZXZFdxcWFRbmUKdVZNVzVMNTBTSHVrNjA5cVl0aTNkU0cyTW9rRVdpdm92dFdodFpsV2xNS1Q4aVRGUE0xV0dmQXMzUW1wQUQ0MApRR0JBZXdVUGRvQXdapISjZqWWNFQ2dENWU0Y0VaR29BWTRjRUNnRDV0NGNFWkhZZG1JY0VDZ0Q1CjU0Y0V3S2dBOTRjRXdLZ0FINGNFd0tnQWlJY0V3S2dBeVRBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQTJncG0KUVFLSitwTkxSbWJNeTExaDJtYUlxODVlUGZrbDliQzZ2a2RCMnpPbUFiS0VEenNKMWpmS2JLUktTb1ZxUXdnYwpzSlBsRGRjWlRiM0svSVh4TXJVZ1BGeXZFRkwrYW04Q3hkTXRlUTdNWUhDYUlzb1dYdjRMTEUvU0toQlNPVWdXCnoyYW9HTzNlVUplVmVtWXlQUXJIODJ1V3RpS3dkcHd5VktvOGRFVkJYaFl5S0tURWJldCtEOFJhYlFNSVRFOFYKY3JncEIrK3NQTWwwazdvSTdHbm5ESWduR2FsbldNZHJtTVRHRTNvTHdXWVlvcjVUbzUxczdsc2hPN2tYQnRTNwp4R2dkcVM1SnVEbHlld3lmaFZ2UnlxZHVxWElpUGpVNW5YWVVNT01DcTBkZ1R2anZkdjNqQTdEN0NkL1V5YzJkCnhhc1ZUSDU4SEk4VDVVMVhmUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K",
			"client-key-data": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBNTlaMWFxcHBDZDY1VXhia3ZuUkllNlRyVDJwaTJMZDFJYll5aVFSYUsraSsxYUcxCm1WYVV3cFB5Sk1VOHpWWVo4Q3pkQ2FrQVBqUkFZRUI3QlE5MmdEQmxjSEVCYUJFRXhxZlQyc3l1WnRHem9LWXUKc2pRU0tXajZKWGY0RXY5QmtLU1p2RjdaQjg5OWJqd0x1M3RxOVZLZjNCQlpDK0ZOQ0ZxMDlmQ2QrVEhETndRWQp0YkQ2Z0xUMUJLL2pGbjVld0VoL1JWQVNVZU1Fb0czS0l2V3luVExUUWV0aFZkZmNPWmkvdFJTRWtrSWZOK1BzCk5lU3JrU05mTWRZV1Rlc2RFVXEydEtsZ3NmNmV1ZW0yVzFPVUZtS20rQk9oSHBBZDg0NmtnMjRhUmp6WkpMV1UKY2wrd1hSS3kwNXN0QTQo1QUg4dU55VjNVTTI4b0V4c204VGh0UUhKUy93akRaWFplMURRb2NURHhNNEsvb3VaVzR2cDBsY2hqMGI5L2g0ClJXUDVEOFFhSmNGLzlCWFN6QUw4Nkk2SnZabzViMDFodGtaOWNwbGJrU1QzWE5nTWhPTEdwRkVDZ1lFQThUbVAKaXlsNnl3c1JITWpJWTZqWVZ0MVIxZVlwNkVQamU5ME5BRHZMamxleFE2YlI0eC9OTE5JSWZWV0kwS1hNekhmVApiM0R3RFhpL2hBwp5ZWhxVklXVXB5YlBpZGlXNnIreC9WWUsyUUFsK3plUmpKZzE4MkU2UVl6UTJXTG03NXRrdTZoMFcyY2lVbThLCnlCWkJMd0tCZ0hlUFdGdFpETUptZ1dWTk9HMWkvWGs1dkl2SXdjNFUwUE4vZEovNzdOc0V5dVJnOVFSZUZlRlMKTElyUFRxakNPV0N0ams3aWtoUGxSeGtaK25MUDJaaHRhMXJlR29UemQrTm83MDdmM0tRRGtpU0FtVGEyUklGeAowLzV0cEQrenk2S1RPNUlKUUJ3TWJRQjZUd1k2ejhkMUljYTVqN1dEdkFiTUY0bERsR2o0Ci0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg=="
		}
	}],
	"contexts": [{
		"name": "internal",
		"context": {
			"cluster": "internalCluster",
			"user": "user"
		}
	}],
	"current-context": "internal"
}

k8s客户端kubectl操作流程图

在这里插入图片描述

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
华为云提供了Kubernetes***可以方便地部署和管理容器应用程序。下面是在华为云K8s部署Nginx的步骤: 1. 登录华为云控制台,选择对应的区域和项目。 2. 在左侧导航栏中选择“容器引擎服务”>“容器服务”。 3. 在容器服务页面,点击“创建集群”按钮。 4. 在创建集群页面,选择合适的集群类型和规格,并设置相关参数,如集群名称、VPC网络等。点击“下一步”。 5. 在节点配置页面,设置节点数量、节点规格等参数。点击“下一步”。 6. 在高级配置页面,可以设置其他高级参数,如自动伸缩、网络策略等。点击“下一步”。 7. 在确认订单页面,确认配置信息无误后,点击“创建集群”按钮。 8. 等待集群创建完成后,在集群列表中找到刚创建的集群,点击“管理”按钮。 9. 在集群详情页面,点击“部署应用”按钮。 10. 在部署应用页面,选择“应用商店”选项卡,搜索并选择“Nginx”应用。 11. 在Nginx应用详情页面,点击“部署”按钮。 12. 在部署参数页面,设置相关参数,如副本数、端口等。点击“下一步”。 13. 在高级配置页面,可以设置其他高级参数,如环境变量、存储卷等。点击“下一步”。 14. 在确认订单页面,确认配置信息无误后,点击“创建”按钮。 15. 等待应用部署完成后,在应用列表中找到刚部署的Nginx应用,可以查看相关信息和访问地址。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值