(2 / 3)CentOS搭建K8s微服务20条

本文摘要:  8、安装代码自动补全  9、Helm安装  10、安装ingress-nginx  11、集群部署nfs动态存储  12、Openssl生成自签证书  13、集群部署harbor  14、集群部署gitlab

8、安装代码自动补全

只在master上执行.

安装bash-completion

yum install -y bash-completion

配置bash-completion

source /usr/share/bash-completion/bash_completion

设置kubectl自动补全

source <(kubectl completion bash)

添加kubectl到bash-completion配置文件中去

kubectl completion bash >/etc/bash_completion.d/kubectl

验证,输入kubectl g,然后按tab自动补全

9、Helm安装

只在master上执行

Helm安装

#安装wget
yum -y install wget
#下载helm二进制包#
wget https://get.helm.sh/helm-v3.8.0-linux-amd64.tar.gz
#解压二进制包
tar -xzvf helm-v3.8.0-linux-amd64.tar.gz
#移动二进制文件到bin下
mv linux-amd64/helm /usr/local/bin/helm
#删除二进制包及解压文件
rm -rf helm-v3.7.1-linux-amd64.tar.gz linux-amd64

Helm配置自动补全

安装bash-completion

yum install -y bash-completion

配置bash-completion

source /usr/share/bash-completion/bash_completion

设置helm自动补全

source <(helm completion bash)

添加helm到bash-completion配置文件中去

helm completion bash > /etc/bash_completion.d/helm

验证,输入helm i,然后按tab自动补全

10、安装ingress-nginx

添加ingress-nginx仓库

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx

查看ingress-nginx所有版本

helm search repo ingress-nginx --versions

拉取指定版本chart包

helm pull ingress-nginx/ingress-nginx --version 4.0.17

解压chart包

tar -xzvf ingress-nginx-4.0.17.tgz

打开values配置文件

vi ingress-nginx/values.yaml

修改如下参数

registry和image是修改镜像仓库和镜像名为阿里云的仓库(该仓库为个人用户仓库)。官方镜像国内网络基本拉取不下来,默认配置使用Deployment控制器,副本数为1。你可以修改为DaemonSet,每个节点部署一个pod,此处使用nodeSelector将ingress控制器固定在master上

controller:
  image:
    registry: registry.aliyuncs.com/google_containers # 第13行
    image: nginx-ingress-controller # 第14行
  hostNetwork: true # 第81行,设置使用主机网络,必须的
  ingressClassResource:
    default: true # 第101行,设置ingress-nginx为默认ingressClass控制器,否则使用ingress时需要指定使用nginx
  tolerations: # 第212行,设置污点容忍度,在该行下面插入,请自行根据master上的污点设置
  - key: "node-role.kubernetes.io/master"
    operator: "Equal"
    value: ""
    effect: "NoSchedule"
  nodeSelector:
    kubernetes.io/os: linux
    node-role.kubernetes.io/master: "master" # 第286行,选择master节点,需要master上有该标签
  admissionWebhooks:
    patch:
      image:
        registry: registry.aliyuncs.com/google_containers # 第600行
        image: kube-webhook-certgen # 第601行
defaultBackend:
  enabled: true # 第721行,启用默认后端,如果不需要,下面2行也不用改
  image:
    registry: registry.aliyuncs.com/google_containers # 第725行
    image: defaultbackend # 第726行
    tag: "1.4" # 第730行,目前没有同步1.5的镜像,改为1.4

创建命名空间

kubectl create namespace ingress-nginx

安装ingess-nginx

helm install ingress-nginx ingress-nginx -n ingress-nginx

查看pod

kubectl get pod -n ingress-nginx -o wide

扩容

#进行扩容,目的就是达到高可用
kubectl -n ingress-nginx scale deployment ingress-nginx-controller --replicas=3

测试

浏览器访问master的ip地址,启用了默认后端则提示default backend - 404,如果没有启用默认后端,则提示nginx的404 Not Found,安装完成

11、集群部署nfs动态存储

本次使用nfs-subdir-external-provisioner来部署nfs动态存储,nfs-client-provisioner已经废弃不建议使用,安装方式大致相同,1.20及以上的kubernetes安装nfs-client-provisioner时注意在/etc/kubernetes/manifests/kube-apiserver.yaml文件中添加- --feature-gates=RemoveSelfLink=false参数

安装nfs工具

所有节点都执行

yum install -y nfs-utils

安装nfs服务器

nfs服务器才执行

创建持久化存储目录

mkdir -p /data/nfs

配置访问权限

192.168.0.0/24为集群网段
rw:以读写的方式共享
syn:默认选项,保持数据同步,数据同步写入到内存和硬盘
no_root_squash:NFS客户端连接服务端时如果使用的是root用户的话,那么对服务端分享的目录来说,也拥有root权限
no_all_squash:不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有root权限

cat >> /etc/exports << EOF
/data/nfs 192.168.0.0/24(rw,sync,no_root_squash,no_all_squash)
EOF

设置开机自启

systemctl enable rpcbind.service
systemctl enable nfs-server.service

启动服务

systemctl start rpcbind.service
systemctl start nfs-server.service

添加nfs动态存储

添加nfs-subdir-external-provisioner仓库

helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/

查看nfs-subdir-external-provisioner所有版本

helm search repo nfs-subdir-external-provisioner --versions

拉取指定版本chart包

helm pull nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --version 4.0.14

解压chart包

tar -xzvf nfs-subdir-external-provisioner-4.0.14.tgz

打开values配置文件

vi nfs-subdir-external-provisioner/values.yaml

修改如下参数

replicaCount: 3 # 第1行,副本个数,根据自身需求设置,建议3个
image:
  repository: k8s.gcr.io/sig-storage/nfs-subdir-external-provisioner # 第5行,设置镜像仓库
  tag: v4.0.2 # 第6行,镜像版本
nfs:
  server: 192.168.0.66 # 第11行,nfs server端地址
  path: /data/nfs # 第12行,nfs目录
storageClass:
  defaultClass: true # 第27行,设置为默认存储类,如果不设置,使用存储类时需要指定
  name: nfs-storage # 第31行,设置存储类资源名称

创建命名空间

kubectl create namespace nfs-storage

安装nfs-subdir-external-provisioner

helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner -n nfs-storage

查看pod

kubectl get pod -n nfs-storage

测试

创建PVC的yaml文件

cat > test-pvc.yaml << EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-pvc 
  namespace: default #这儿不指定命名空间会指向到nfs-storage的命名空间去
spec:
  storageClassName: nfs-storage # 指定存储类,如果设置了默认,可以去掉
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
EOF
#一键创建
cat > status-pvc.yaml << EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: status-pvc
  namespace: default
spec:
  storageClassName: nfs-storage # 指定存储类,如果设置了默认,可以去掉
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
EOF
kubectl apply -f .yaml 
kubectl get pvc,pv -n nfs-storage

创建pvc,会自动相应的pv

kubectl apply -f test-pvc.yaml -n nfs-storage

查看pvc和pv是否创建

kubectl get pvc,pv -n nfs-storage

清理

删除chart压缩包

解压出来的文件夹,不建议删除,可用于恢复和更改服务

rm -rf nfs-subdir-external-provisioner-4.0.14.tgz

删除pvc,会根据配置规则删除pv

kubectl delete -f test-pvc.yaml -n nfs-storage

删除pvc的yaml文件

rm -rf test-pvc.yaml

进入nfs目录

cd /data/nfs/

删除该目录下test-pvc创建的文件夹

注意事项

  • 修改values.yaml时

  • onDelete:如果存在且有delete值,则删除该目录,如果存在且有retain值,则保留该目录。默认将在共享上以此名称归档:archived-<volume.Name>

  • archiveOnDelete:如果它存在并且值为false,则删除该目录。如果 onDelete 存在,archiveOnDelete 将被忽略。默认将在共享上以此名称归档:archived-<volume.Name>

  • pathPattern:指定用于通过 PVC 元数据(例如标签、注释、名称或命名空间)创建目录路径的模板。要指定元数据,请使用 {.PVC.namespace}-${.PVC.name} 作为 pathPattern。默认不适用。

  • reclaimPolicy: Retain为保留 Delete 为删除

12、Openssl生成自签证书

证书格式为PEM格式,版本为v3

创建配置文件

cat > openssl.cnf << EOF
# ca根证书配置
[ ca ]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer
basicConstraints = critical,CA:true

# HTTPS应用证书配置
[ crt ]
subjectKeyIdentifier = hash
authorityKeyIdentifier=keyid:always,issuer
basicConstraints = critical, CA:false
keyUsage = critical, digitalSignature, cRLSign, keyEncipherment
extendedKeyUsage = critical, serverAuth, clientAuth
subjectAltName=@alt_names

# SANs可以将一个证书给多个域名或IP使用
# 访问的域名或IP必须包含在此,否则无效
# 修改为你要保护的域名或者IP地址,支持通配符
[alt_names]
DNS.1 = *.anson.cn
IP.1 = 192.168.0.66
IP.2 = 192.168.0.67
IP.3 = 192.168.0.68
EOF

生成根证书

生成根证书私钥

openssl genrsa -out root.key 2048

生成根证书请求文件

C:所在国家 (Country),只能是两位字母缩写
ST:所在省份(State)
L:所在城市(Locality)
O:所在组织(Organization)
OU:所在部门(Organization Unit)
CN:公用名,即域名(Common Name)  

openssl req -new -key root.key -out root.csr -subj "/C=CN/ST=Sichuan/L=Chengdu/O=anson/OU=anson/CN=*.anson.cn"

生成根证书

-req: 证书请求
-extfile:扩展文件配置和-extensions参数使用
-extensions:扩展配置
-in:证书请求文件
-out:证书输出文件
-signkey:签名的私钥
-days:有效期

openssl x509 -req -extfile openssl.cnf -extensions ca -in root.csr -out root.crt -signkey root.key -CAcreateserial -days 36500

颁发pfx

pem证书转pfx证书分两种,一种带ca证书转换,一种不带ca证书转换

1.pem转pfx(不带ca证书)
以test.pem转test.pfx为例

openssl rsa -in test.pem -out test.key
openssl x509 -in test.pem -out test.crt
openssl pkcs12 -export -out test.pfx -inkey test.key -in test.crt

2.pem转pfx(带ca证书)
以test.pem和ca.crt(ca.pem)转 test_ca.pfx为例

openssl rsa -in test.pem -out test.key
openssl x509 -in test.pem -out test.crt
openssl pkcs12 -export -out test_ca.pfx -inkey test.key -in test.crt -CAfile ca.crt

如果ca证书为pem格式

openssl pkcs12 -export -out test_ca.pfx -inkey test.key -in test.crt -CAfile ca.pem
openssl pkcs12 -export -out client-ca.pfx -inkey client-key.pem -in client-cert.pem -CAfile cacert.pem
openssl pkcs12 -export -out client.pfx -inkey client-key.pem -in client-cert.pem

ps(个人用):

openssl pkcs12 -export -out client.pfx -inkey client.key -in client.crt
openssl pkcs12 -export -out client-ca.pfx -inkey client.key -in client.crt -CAfile ca.crt

签发应用证书

生成应用私钥

openssl genrsa -out test.key 2048

生成test.anson.cn域名证书请求文件  

openssl req -new -key test.key -out test.csr -subj "/C=CN/ST=Sichuan/L=Chengdu/O=anson/OU=test/CN=test.anson.cn"

签发证书

test.csr为证书序列号文件  

openssl x509 -req -extfile openssl.cnf -extensions crt -CA root.crt -CAkey root.key -CAserial test.srl -CAcreateserial -in test.csr -out test.crt -days 36500

使用应用私钥

test.key和应用证书test.crt为test.anson.cn添加HTTPS服务

为测试应用添加域名

#添加证书到k8s中
kubectl create secret tls tls-test --cert=test.crt --key=test.key -n default
#创建域名访问
cat > ingress-test.yaml << EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  creationTimestamp: null
  name: test-nginx
  namespace: default
spec:
  ingressClassName: nginx
  rules:
  - host: test.anson.cn
    http:
      paths:
      - backend:
          service:
            name: web
            port:
              number: 80
        path: /
        pathType: Prefix
  tls:
  - hosts:
    - test.anson.cn
    secretName: tls-test
status:
  loadBalancer: {}
EOF
kubectl apply -f ingress-test.yaml

信任根证书

温馨提示:不要轻易信任一个根证书!

windows

下载根证书root.crt到windows,双击证书

点击安装证书

选择本地计算机,点击下一页

可以根据需求自行选择,推荐手动选择受信任的根证书颁发机构

点击完成,浏览器访问测试

linux

# 将受信任的根证书下载到 /etc/pki/ca-trust/source/anchors/ 目录
cp root.crt /etc/pki/ca-trust/source/anchors/root.crt
# 更新受信任的根证书
update-ca-trust

清理

删除请求文件

root.key和root.crt建议保留,以后签发证书都可以用它,不用在重复信任根证书了,gitlab.key和gitlab.crt也建议保留

rm -rf root.csr test.csr

13、集群部署harbor

添加harbor仓库

helm repo add harbor https://helm.goharbor.io

查看harbor所有版本

helm search repo harbor/harbor --versions

拉取指定版本chart包

helm pull harbor/harbor --version 1.8.0

解压chart包

tar -xzvf harbor-1.8.0.tgz

创建命名空间

kubectl create namespace harbor

生成证书并添加到k8s的secret

#添加harbor证书
openssl genrsa -out harbor.key 2048
openssl req -new -key harbor.key -out harbor.csr -subj "/C=CN/ST=Sichuan/L=Chengdu/O=anson/OU=harbor/CN=harbor.anson.cn"
openssl x509 -req -extfile openssl.cnf -extensions crt -CA root.crt -CAkey root.key -CAserial harbor.srl -CAcreateserial -in harbor.csr -out harbor.crt -days 36500
kubectl create secret tls tls-harbor --cert=harbor.crt --key=harbor.key -n harbor
#添加harbor-notary证书
openssl genrsa -out harbor-notary.key 2048
openssl req -new -key harbor-notary.key -out harbor-notary.csr -subj "/C=CN/ST=Sichuan/L=Chengdu/O=anson/OU=harbor-notary/CN=harbor-notary.anson.cn"
openssl x509 -req -extfile openssl.cnf -extensions crt -CA root.crt -CAkey root.key -CAserial harbor-notary.srl -CAcreateserial -in harbor-notary.csr -out harbor-notary.crt -days 36500
kubectl create secret tls tls-harbor-notary --cert=harbor-notary.crt --key=harbor-notary.key -n harbor

打开values配置文件

vi harbor/values.yaml

修改如下参数

可以默认参数,但是如果用自己的域名就需要修改了,生成自签证书,具体步骤请参考Openssl生成自签证书,注意SANs要包含harbor.anson.cn和harbor-notary.anson.cn这两个域名,最后需要2个文件,应用证书harbor.crt和应用私钥harbor.key
expose:
  tls:
    certSource: secret # 第21行,使用自签证书
    secret:
      secretName: "tls-harbor" # 第30行,harbor证书secret
      notarySecretName: "tls-harbor-notary" # 第25行,notary证书secret
  ingress:
    hosts:
      core: harbor.anson.cn # 第38行,harbor域名
      notary: harbor-notary.anson.cn # 第39行,notary域名,用于镜像的签名,保证镜像安全,不能与core设置的域名一样
    annotations:
      kubernetes.io/ingress.class: "nginx" # 第50行,添加注解,设置ingress控制器,如果设置了默认ingress控制器,可以不加
externalURL: https://harbor.anson.cn # 第123行,harbor访问URL,跟第38行域名保持一致
persistence:
  persistentVolumeClaim:
    registry: # 镜像存储
      storageClass: "nfs-storage" # 第216行,nfs存储类名,如果设置了默认存储类,可以不填
      size: 10Gi # 第219行,根据自身需求设置存储大小,建议500Gi
    chartmuseum: # chart存储
      storageClass: "nfs-storage" # 第222行
      size: 5Gi # 第225行,根据自身需求设置存储大小
    jobservice: # 定时任务
      storageClass: "nfs-storage" # 第228行
      size: 1Gi # 第231行
    database:
      storageClass: "nfs-storage" # 第236行
      size: 1Gi # 第239行
    redis:
      storageClass: "nfs-storage" # 第244行
      size: 1Gi # 第247行
    trivy: # 镜像漏扫
      storageClass: "nfs-storage" # 第250行
      size: 5Gi # 第253行

安装harbor

helm install harbor harbor -n harbor

查看pod

kubectl get pod -n harbor

windows设置hosts,修改C:\Windows\System32\drivers\etc\hosts文件,添加如下配置

192.168.0.66为master节点的IP地址,ingress-nginx-controller控制器在master上,请自行修改为相应IP地址。如果修改不了,需要修改hosts文件的权限,或者新建一个文本文件重命名为hosts

192.168.0.66 harbor.anson.cn

浏览器访问harbor

默认、用户名为admin 密码为Harbor12345。
https://harbor.anson.cn

测试

登录harbor,新建test项目

选择测试节点,添加hosts解析记录

cat >> /etc/hosts << EOF
192.168.0.66 harbor.anson.cn
EOF

信任私有仓库

信任根证书(方式1 推荐)

拷贝根证书到信任证书目录
cp root.crt /etc/pki/ca-trust/source/anchors/root.crt
更新信任证书列表
update-ca-trust
重启docker
systemctl restart docker

添加insecure-registries(方式2)

打开docker配置文件
vi /etc/docker/daemon.json
添加insecure-registries
{
    "insecure-registries": ["harbor.anson.cn"]
}
重新加载配置
systemctl reload docker

登录harbor

docker login harbor.anson.cn
docker login harbor.anson.cn -u admin -p Harbor12345

拉取nginx镜像

docker pull nginx:latest

添加tag

docker tag nginx:latest harbor.anson.cn/test/nginx:latest

推送到harbor仓库

docker push harbor.anson.cn/test/nginx:latest

查看仓库

删除本地nginx镜像

docker rmi nginx:latest
docker rmi harbor.anson.cn/test/nginx:latest

拉取镜像

docker pull harbor.anson.cn/test/nginx:latest

清理

删除nginx容器

docker rmi harbor.anson.cn/test/nginx:latest

删除chart压缩包

解压出来的文件夹,不建议删除,可用于恢复和更改服务

rm -rf harbor-1.8.0.tgz

登录harbor,依次删除nginx镜像仓库,删除test项目

14、集群部署gitlab

添加gitlab仓库

helm repo add gitlab https://charts.gitlab.io/

查看gitlab所有版本

helm search repo gitlab/gitlab --versions

拉取指定版本chart包

helm pull gitlab/gitlab --version 5.5.2

解压chart包

tar -xzvf gitlab-5.5.2.tgz

创建命名空间

kubectl create namespace gitlab

添加证书到集群secret中

#生成应用私钥core
openssl genrsa -out gitlab.key 2048
#生成域名证书请求文件
openssl req -new -key gitlab.key -out gitlab.csr -subj "/C=CN/ST=Sichuan/L=Chengdu/O=anson/OU=gitlab/CN=gitlab.anson.cn"
#签发证书
openssl x509 -req -extfile openssl.cnf -extensions crt -CA root.crt -CAkey root.key -CAserial gitlab.srl -CAcreateserial -in gitlab.csr -out gitlab.crt -days 36500
#添加证书到k8s中
kubectl create secret tls tls-gitlab --cert=gitlab.crt --key=gitlab.key -n gitlab

打开values配置文件

vi gitlab/values.yaml

修改如下参数

生成自签证书,具体步骤请参考Openssl生成自签证书,注意SANs要包含gitlab.anson.cn和minio.anson.cn、registry.anson.cn这三个域名,最后需要2个文件,应用证书gitlab.crt和应用私钥gitlab.key

global:
  edition: ce # 第45行,修改为ce为社区版,默认ee为企业版
  hosts:
    domain: anson.cn # 第57行,gitlab主域名,会自动使用gitlab.anson.cn,minio.anson.cn,registry.anson.cn,也可以单独设置相应的name和https字段,参考https://docs.gitlab.cn/charts/charts/globals.html
  ingress:
    configureCertmanager: false # 第73行,不使用Certmanager
    annotations:
      kubernetes.io/ingress.class: nginx # 第76行,添加注解,设置ingress控制器,如果设置了默认ingress控制器,可以不加
    tls:
      enabled: true # 第79行,取消注释,设置tls
      secretName: "tls-gitlab" # 第80行,取消注释,设置tls的secretName
certmanager:
  install: false # 第721行,不安装certmanager管理证书
nginx-ingress:
  enabled: false # 第731行,已经有ingress-nginx了不需要再安装
gitlab-runner:
  install: false # 第988行,不安装gitlab-runner,使用jenkins构建服务,如果有需要,自行开启
#其他设置
gitlab/values.yaml中取消sidekiq安装
#文件中资源2.5G调整,不需要这么多 340行
gitlab/charts/gitlab/charts/webservice/values.yaml

安装gitlab

helm install gitlab gitlab -n gitlab

查看pod

kubectl get pod -n gitlab

设置hosts

192.168.0.66为master节点的IP地址,ingress-nginx-controller控制器在master上,请自行修改为相应IP地址。如果修改不了,需要修改hosts文件的权限,或者新建一个文本文件重命名为hosts

192.168.0.66 gitlab.anson.cn

浏览器访问gitlab

https://gitlab.anson.cn

获取root密码

minio,redis,portgresql等密码都在相应的secret中

kubectl get secret gitlab-gitlab-initial-root-password -n gitlab -ojsonpath='{.data.password}' | base64 --decode ; echo
#root密码
UsM0UJ4qcHh4W1HQnJ9WThHMmfDquxU8xPNsI2eVmAW6IjeRJ46PNIJKazTyi1KW
hudingwen
#token令牌
HfGbHDaKPQcPy_hKXknx

测试

登录gitlab

#设置SSL证书不验证
git config --global http.sslbackend schannel
git config --global http.sslVerify false

#设置用户和邮箱
git config --global user.name "root"
git config --global user.email "admin@example.com"
#生成免登录SSH密钥 C:\Users\Administrator\.ssh
ssh-keygen -t rsa -C "admin@example.com"
#rsa转ppk 运行puttygen点击Conversions菜单项中的Import key 点击Save private key转成ppk
#拉取代码
#ssh方式拉取
git clone git@gitlab.anson.cn:root/test.git
#http方式拉取
git clone https://gitlab.anson.cn/root/test.git
#推送
git switch -c main
git add test.txt
git commit -m "this is a test"
git push -u origin main
全部推送
git switch -c main
git add .
git commit -m "delete test file"
git push origin main
#测试ssh
ssh -T git@gitlab.anson.cn
#测试是否正常
ssh -vT git@gitlab.anson.cn -p 32022

ssh-add C:\Users\Administrator\.ssh\id_rsa

git clone ssh://git@gitlab.anson.cn:32022/root/net.git


#随机Pod暴露端口
kubectl expose deployment gitlab-gitlab-shell -n gitlab --port=32022 --target-port=32022 --type=NodePort
#代理暴露端口
kubectl port-forward pod/gitlab-gitlab-shell-759f4bb668-dqdz9 -n gitlab 32022:32022
kubectl port-forward service/gitlab-gitlab-shell -n gitlab 32022:32022

kubectl edit svc/gitlab-gitlab-shell -n gitlab
kubectl edit svc/kube-prometheus-stack-prometheus -n kube-prometheus-stack
spec:
  clusterIP: 10.101.42.41
  clusterIPs:
  - 10.101.42.41
  externalTrafficPolicy: Cluster
  internalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - name: web
    nodePort: 32022
    port: 9090
    protocol: TCP
    targetPort: 9090
  selector:
    app.kubernetes.io/name: prometheus
    prometheus: kube-prometheus-stack-prometheus
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}

安装windows git

设置使用windows证书机制

如果不设置会报错:SSL certificate problem: unable to get local issuer certificate

git config --global http.sslbackend schannel

克隆仓库到本地,输入账号和密码

git clone https://gitlab.anson.cn/gitlab-instance-98897215/Monitoring.git

在文件下新建README.md文件

添加README.md文件到暂存区

git add README.md

提交到本地仓库

git commit -m 添加README.md文件测试

推送到gitlab仓库

git push origin