<commit_before>=== 项目部署

// TODO 脚本化

==== 前置准备

.集群初始化

[source,bash]
----
# 创建集群角色，用于服务发现
kubectl create clusterrole service-discovery-client \
    --verb=get,list,watch \
    --resource=pods,services,configmaps,endpoints
----

.项目初始化

一个项目对应多个服务，在开始部署服务之前先要做一定的准备。

* 在harbor中创建对应项目的Docker项目私有库（如devops-example），并创建对应项目的用户，设置为该库的管理员
* 为当前项目初始化Kubernetes配置
[source,bash]
----
# 命名空间，推荐与docker库同名
DEW_NAMESPACE=devops-example
# Docker Registry Host
DEW_DOCKER_REGISTRY=harbor.dew.ms
# Docker项目库管理员名称，推荐与docker库同名
DEW_DOCKER_USER_NAME=$DEW_NAMESPACE
# Docker项目库管理员密码
DEW_DOCKER_USER_PASS=<PASSWORD>
# Docker项目库管理员邮箱
DEW_DOCKER_USER_EMAIL=$<EMAIL>

# 创建新的命名空间，用于资源隔离
kubectl create namespace $DEW_NAMESPACE

# 绑定服务发现角色到该命名空间的默认用户
kubectl create rolebinding default:service-discovery-client \
    -n $DEW_NAMESPACE \
    --clusterrole service-discovery-client \
    --serviceaccount $DEW_NAMESPACE:default

# 创建Docker Registry密钥<commit_msg>Add the doc of `harbor project initializtion` #51<commit_after>=== 项目部署

// TODO 脚本化

==== 前置准备

.集群初始化

[source,bash]
----
# 创建集群角色，用于服务发现
kubectl create clusterrole service-discovery-client \
    --verb=get,list,watch \
    --resource=pods,services,configmaps,endpoints
----

.项目初始化

一个项目对应多个服务，在开始部署服务之前先要做一定的准备。

* 在harbor中创建对应项目的Docker项目私有库（如devops-example），并创建对应项目的用户，设置为该库的管理员
[source,bash]
----
# 协议类型与host
SCHEME=https
HARBOR_HOST=harbor.dew.env
# 若使用https，需要在每个curl命令后加 -k
## 或使用service name作为host:
#  SCHEME=http
#  HARBOR_HOST=dew-harbor-harbor-core

# 使用harbor管理员账号来创建用户
DEW_HARBOR_ADMIN=admin
DEW_HARBOR_ADMIN_PASSWORD=<PASSWORD>
ADMIN_AUTHORIZATION=`echo -n ${DEW_HARBOR_ADMIN}:${DEW_HARBOR_ADMIN_PASSWORD} | base64`

# 创建项目使用的参数，值与Kubernetes配置保持一致
DEW_NAMESPACE=devops-example
DEW_DOCKER_USER_NAME=$DEW_NAMESPACE
DEW_DOCKER_USER_PASS=<PASSWORD>
DEW_DOCKER_USER_EMAIL=${<EMAIL>

# 创建用户(创建成功的状态码为201)
curl -X POST "${SCHEME}://${HARBOR_HOST}/api/users" -H "accept: application/json" -H "authorization: Basic ${ADMIN_AUTHORIZATION}" -H "Content-Type: application/json" -d "{ \"email\": \"${DEW_DOCKER_USER_EMAIL}\", \"username\": \"${DEW_DOCKER_USER_NAME}\", \"password\": \"${<PASSWORD>}\", \"realname\": \"${DEW_DOCKER_USER_NAME}\", \"comment\": \"init\"}" curl -X POST "${SCHEME}://${HARBOR_HOST}/api/projects" -H "accept: application/json" -H "authorization: Basic ${USER_AUTHORIZATION}" -H "Content-Type: application/json" -d "{ \"project_name\": \"${DEW_NAMESPACE}\"}" -o /dev/nullrl -s -w %{http_code} -k

# 使用上面创建的用户登录
USER_AUTHORIZATION=`echo -n $DEW_DOCKER_USER_NAME:$DEW_DOCKER_USER_PASS | base64`

# 创建项目（创建项目的项目管理员默认为当前登录用户。创建成功的状态码为201，409为“项目名已存在”。）
curl -X POST "${SCHEME}://${HARBOR_HOST}/api/projects" -H "accept: application/json" -H "authorization: Basic ${USER_AUTHORIZATION}" -H "Content-Type: application/json" -d "{ \"project_name\": \"${DEW_NAMESPACE}\"}" -o /dev/nullrl -s -w %{http_code} -k
----

* 为当前项目初始化Kubernetes配置
[source,bash]
----
# 命名空间，推荐与docker库同名
DEW_NAMESPACE=devops-example
# Docker Registry Host
DEW_DOCKER_REGISTRY=harbor.dew.ms
# Docker项目库管理员名称，推荐与docker库同名
DEW_DOCKER_USER_NAME=$DEW_NAMESPACE
# Docker项目库管理员密码
DEW_DOCKER_USER_PASS=<PASSWORD>
# Docker项目库管理员邮箱
DEW_DOCKER_USER_EMAIL=$<EMAIL>

# 创建新的命名空间，用于资源隔离
kubectl create namespace $DEW_NAMESPACE

# 绑定服务发现角色到该命名空间的默认用户
kubectl create rolebinding default:service-discovery-client \
    -n $DEW_NAMESPACE \
    --clusterrole service-discovery-client \
    --serviceaccount $DEW_NAMESPACE:default

# 创建Docker Registry密钥
{'fraction_non_alphanumeric': 0.144011544011544, 'fraction_numerical': 0.004329004329004329, 'mean_word_length': 5.876984126984127, 'pattern_counts': {'":': 7, '<': 11, '<?xml version=': 0, '>': 11, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6534683', 'n_tokens_mistral': 1726, 'n_tokens_neox': 1852, 'n_words': 204}