本方案的最终效果: 在本地minikube中有一个完整的arkid环境,vscode容器化开发环境,无需本地安装python和依赖。 一键在容器中进行开发调试,一个命令部署更新代码到minikube中。
一、配置和程序要求
- 电脑配置:
本教程针对的是mac,其他系统稍作修改就能使用。
内存 16g+ 需要的程序:
VirtualBox
vscode
minikube
skaffold
kubectl
helm
docker
二、程序安装:
# 1、VirtualBox 和 vscode 的安装就不再赘述了。# 2、minikube 安装# 2.0、下载minikubecurl -Lo minikube https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.16.0/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/# 2.1、首次安装minikube start \--profile='arkid' \--driver='virtualbox' \--image-mirror-country cn \--iso-url=https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/iso/minikube-v1.16.0.iso \--registry-mirror=https://gug8awv5.mirror.aliyuncs.com \--cpus=2 \--memory=6096 \--kubernetes-version=1.18.15 \--insecure-registry=192.168.0.0/12 \--docker-opt dns=10.96.0.10 \--addons ingress# 2.2、基本操作minikube -p arkid statusminikube -p arkid stopminikube -p arkid startminikube -p arkid delete # 删除慎用啊minikube -p arkid addons listminikube -p arkid addons enable ingressminikube -p arkid ssh# 2.3、配置dockerd# 查看minikube -p arkid docker-env# 配置docker后端为arkid minikube的dockerdecho "eval \$(minikube -p arkid docker-env)" >> ~/.zshrcsource ~/.zshrc# 3、skaffold 安装curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-darwin-amd64 && \sudo install skaffold /usr/local/bin/# 4、kubectl 安装curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.15/bin/darwin/amd64/kubectlchmod +x ./kubectlsudo mv ./kubectl /usr/local/bin/kubectlkubectl get nodes# 5、helm 命令安装brew install helm其他安装方式请看官方文档:https://helm.sh/docs/intro/install/# 6、docker 客户端命令安装可以安装"docker desktop for mac",只用docker客户端命令,不用启动。https://hub.docker.com/editions/community/docker-ce-desktop-mac/docker ps
三、arkid helm部署到minikube
git clone https://github.com/longguikeji/arkid-charts.gitcd arkid-charts/charthelm install arkid . --set persistence.init=true --set ingress.cert=false --set ingress.tls=false --set apiServer=""# 暴露到本地端口kubectl port-forward --address 0.0.0.0 deployment/arkid-portal 8081:80# 访问,管理员账号密码 admin / adminhttp://127.0.0.1:8081
四、克隆arkid后端工程
git clone https://github.com/longguikeji/arkid.git
五、vscode开发arkid项目
vscode需要安装插件 Remote-Containers
1、点击Remote-Containers: Reopen in Container
如果报错,把vscode完全退出,再打开arkid项目
2、点击details 查看进度,首次下载会比较慢
3、出现如下图片,说明环境都启动好了,在容器中所有的依赖都安装好了
4、arkid根目录下添加本地配置文件 settings_local.py
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'arkid','USER': 'root','PASSWORD': 'root','HOST': 'arkid.default.svc.cluster.local','PORT': '3306','OPTIONS': {'autocommit': True,'init_command': 'SET default_storage_engine=InnoDB','charset': 'utf8mb4',},}}REDIS_CONFIG = {'HOST': 'arkid.default.svc.cluster.local','PORT': 6379,'DB': 0,'PASSWORD': None,}REDIS_URL = 'redis://{}:{}/{}'.format(REDIS_CONFIG['HOST'], REDIS_CONFIG['PORT'], REDIS_CONFIG['DB']) if REDIS_CONFIG['PASSWORD'] is None \else 'redis://:{}@{}:{}/{}'.format(REDIS_CONFIG['PASSWORD'], REDIS_CONFIG['HOST'], REDIS_CONFIG['PORT'], REDIS_CONFIG['DB'])CACHES = {"default": {"BACKEND": "django_redis.cache.RedisCache","LOCATION": REDIS_URL,"TIMEOUT": 60 * 60 * 24 * 3,"OPTIONS": {"MAX_ENTRIES": None,"CLIENT_CLASS": "django_redis.client.DefaultClient",}}}CELERY_BROKER_URL = REDIS_URLINSTALLED_APPS += ['ldap.sql_backend']# 最终对外暴露的 web server 地址BASE_URL = 'http://arkid-portal'import datetimeSMS_LIFESPAN = datetime.timedelta(seconds=600)EXPIRING_TOKEN_LIFESPAN = datetime.timedelta(days=365 * 10)REST_FRAMEWORK = {'DEFAULT_AUTHENTICATION_CLASSES': (# 'oneid.authentication.CustomExpiringTokenAuthentication','oneid.authentication.SUDOExpiringTokenAuthentication','oneid.authentication.HeaderArkerBaseAuthentication',),'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAuthenticated','oneid.permissions.IsAdminUser',)}
5、生成debug配置并启动
6、启动之后,把端口暴露到笔记本端口,就可以在本地对接口进行测试了


六、skaffold自动部署到minikube中测试
当前vscode内的终端都是在容器中,需要打开一个外部的终端,进入到arkid目录,执行 skaffold run。
还有另外一个命令可以监控文件变化自动更新,skaffold dev,skaffold文档:https://skaffold.dev/docs/quickstart/
更新成功之后访问,管理员账号密码 admin / admin
http://127.0.0.1:8081
