1. 使用临时token登录阿里云CR 1 aliyun cr GetAuthorizationToken | jq .data.authorizationToken | tr -d '"' | docker login --username=cr_temp_user --password-stdin registry.cn-hangzhou.aliyuncs.com
2. 获取Kubernetes集群的kuberctl配置文件 1 aliyun cs DescribeClusterUserKubeconfig --ClusterId=c90bf856c68364386a07384a6a2bb176b
3. 使用use-context切换管理多个kubernetes集群 多个集群kubectl配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 apiVersion: v1 clusters: - cluster: certificate-authority-data: DATA+OMITTED server: https://192.168.132.236/k8s/clusters/c-8s9dc name: ng-demo - cluster: certificate-authority-data: DATA+OMITTED server: https://192.168.132.236:6443 name: ng-demo-server01 contexts: - context: cluster: ng-demo user: ng-demo name: ng-demo - context: cluster: ng-demo-server01 user: ng-demo name: ng-demo-server01 current-context: ng-demo kind: Config preferences: {} users: - name: ng-demo user: token: REDACTED
切换命令如下:
1 2 $ kubectl config use-context ng-demo Switched to context "ng-demo".
4. 设置OSS生命周期 Terraform目前(2021-3-10)不支持对于分片文件的生命周期, 可以考虑通过阿里云CLI实现.
1 2 3 4 aliyun oss lifecycle --method get oss://research-ng-temp aliyun oss lifecycle --method put oss://research-ng-temp lifecycle.xml
上面命令中的lifecycle.xml如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 <?xml version="1.0" encoding="UTF-8" ?> <LifecycleConfiguration > <Rule > <ID > 857e37e3-0a3e-4250-a408-88f5b35f9714</ID > <Prefix > </Prefix > <Status > Enabled</Status > <Expiration > <Days > 16</Days > </Expiration > <AbortMultipartUpload > <Days > 16</Days > </AbortMultipartUpload > </Rule > </LifecycleConfiguration >
5. ICP
ICP接入 : ICP可以同别的平台迁移到阿里云, 这个过程比在做一次ICP快很多
阿里云每个实名账号个人或企业主体在一年内可以有20个免费DV证书可以使用, 每个证书仅支持绑定一个具体的域名, 20个的数量可以支持常见的测试和验证需求. 这种证书可以用于:
7. 第三方账号证书导入 阿里云支持上传证书, 可以将一个已经在其他平台和账号的证书上传到阿里云, 操纵步骤:
下载购买证书, 如果在阿里云购买的话, 下载的时候有很多种下载方式, 选择 nginx 下载
解压下载文件, 可以获得.pem(certificate)和.key(provide key)文件
上传, 在需要证书的阿里云账号的证书管理控制台, 粘贴复制.pem和.key的内容
使用, 上传完后证书即可以像其他购买的证书一样正常使用, 例如配置OSS自定义域名,代码15和16行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 resource "alicloud_cdn_domain_new" "docker_storage_domain" { domain_name = local.ng_docker_file_domain cdn_type = "download" scope = "domestic" sources { content = local.docker_storage_bucket_domain type = "oss" port = 443 } certificate_config { server_certificate_status = "on" force_set = 1 cert_name = local.cert_name cert_type = "upload" } tags = { Name = "${var.stack_name}-docker-storage-domain" Stack = var.stack_name } depends_on = [ alicloud_oss_bucket.docker_storage ] }
8. KMS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ali kms ListSecretVersionIds --SecretName="/stack/research/db_password" { "PageNumber": 1, "PageSize": 10, "RequestId": "e9bf3ff1-d3b1-44e1-abef-96416a52cd7d", "SecretName": "/stack/research/db_password", "TotalCount": 2, "VersionIds": { "VersionId": [ { "CreateTime": "2021-05-07T02:13:58Z", "VersionId": "v20210507191252", "VersionStages": { "VersionStage": [ "ACSPrevious" ] } }, { "CreateTime": "2021-05-07T02:15:45Z", "VersionId": "v20210510191252", "VersionStages": { "VersionStage": [ "ACSCurrent" ] } } ] }
可以使用VersionStage获取最近的Secret值 目前值发现两个VersionStage: ACSCurrent/ACSPrevious
1 2 ali kms GetSecretValue --SecretName="/stack/research/db_password" --VersionStage=ACSCurrent ali kms GetSecretValue --SecretName="/stack/research/db_password" --VersionStage=ACSPrevious
使用Key加密keyId可以是id也可以是alias
1 2 ali kms Encrypt --KeyId="8da42b24-f1f7-450b-8ccb-f568b1e555fe" --Plaintext=helloworld ali kms Encrypt --KeyId=alias/NG-Common --Plaintext=helloworld
1 2 3 4 5 6 7 ali kms Decrypt --CiphertextBlob="ZWZiOTMxMDMtOTUyNi00OGUxLWI5MzEtOTYxZjU0OGUwMWU0T3BDf6PdXvJIHzMKCIxYKr7N3PngT2aS07Rk7TiFx4Me+u0QIMk=" { "KeyId": "8da42b24-f1f7-450b-8ccb-f568b1e555fe", "KeyVersionId": "efb93103-9526-48e1-b931-961f548e01e4", "Plaintext": "helloworld", "RequestId": "691ce8ec-f5e5-41dd-bc55-d8a06e2d99e2" }
9. 使用digest拉取Docker镜像 image tag如分支名不能精确代表最新的镜像, 可以使用digest, digest使用时用@而不是, 如下:
1 docker pull registry.cn-hangzhou.aliyuncs.com/ngiq-cr/app_server@sha256:c4e1cbe395d87e4c9d94d831c689e7c01531d457f3d1bbbb83d6f1a698fac8e4
digest如何获取呢? 在阿里云中可以使用GetRepoTag方法:
1 2 3 4 5 6 7 8 9 10 11 aliyun cr GetRepoTag --RepoName=app_server --RepoNamespace=ngiq-cr --Tag=feature-aliyun { "data": { "digest": "7de0f4b43286daef25f2c3ffadb9a78796e9aabde45feb16199528357b731791", "imageCreate": 1620436982000, "imageId": "de991a1a65f1eda17878cbb326e39e092d135f60bed068a983f750925ad6ce31", "imageSize": 346647563, "imageUpdate": 1620641463000, "status": "NORMAL", "tag": "feature-aliyun" }
配合jq则可以快速获取digest值:
1 aliyun cr GetRepoTag --RepoName=app_server --RepoNamespace=ngiq-cr --Tag=feature-aliyun | jq -r '.data.digest'
需要注意的是这个值在docker pull的时候需要增加sha256:
10. 获取CLI STS TOKEN aliyun 有些资源可以通过配置的profile自动获取STS但是有些资源不可以,例如CR、CSK
1 2 3 4 5 6 7 8 export CRED=$(curl http://100.100.100.200/latest/meta-data/Ram/security-credentials/CICDRole) export AK=$(echo $CRED | jq -r '.AccessKeyId') export AK_SEC=$(echo $CRED | jq -r '.AccessKeySecret') export AK_STS=$(echo $CRED | jq -r '.SecurityToken') export ALI_CRED="--sts-token=$AK_STS --access-key-id=$AK --mode=StsToken --access-key-secret=$AK_SEC" aliyun cr $ALI_CRED GetAuthorizationToken | jq -r .data.authorizationToken | docker login --username=cr_temp_user --password-stdin "${PROC_BUILDER_URI}"
11. 获取account id 1 2 3 4 5 ali ram GetAccountAlias { "AccountAlias": "1886910356xxxxx", "RequestId": "797603B6-F858-48B5-8D63-5DF508CF4713" }
12. 同步文件 1 2 3 4 5 -- 同步 ng-system mc cp --continue --recursive s3/ng-system/ oss/ng-system/ -- 比较 mc diff s3/ng-system/ oss/ng-system/
13. 命令行 ECR 个人版本的CR存在限流问题, 当个人仓库流量到达一定的限制, 触发限流, 当值镜像拉取很慢, 此时应该开启企业版CR即ECR, 当时阿里云CLI CR默认是没有对ECR做支持的, 但是可以通过force和version使用OpenAPI, 进而达到管理企业版CR的目的:
1 2 3 4 #获取实例列表 ali cr ListInstance --force --version 2018-12-01 #获取仓库列表 ali cr ListRepository --InstanceId=cri-xxxx--RepoStatus=NORMAL --version 2018-12-01 --force | jq -r '.Repositories[]|select(.RepoNamespaceName=="ngiq-prod-cr")|{RepoId,RepoNamespaceName,RepoName}'