本文摘要:
8、安装代码自动补全
9、Helm安装
10、安装ingress-nginx
11、集群部署nfs动态存储
12、Openssl生成自签证书
13、集群部署harbor
14、集群部署gitlab
8、安装代码自动补全
只在master上执行
安装bash-completion
代码语言:javascript复制yum install -y bash-completion
配置bash-completion
代码语言:javascript复制source /usr/share/bash-completion/bash_completion
设置kubectl自动补全
代码语言:javascript复制source <(kubectl completion bash)
添加kubectl到bash-completion配置文件中去
代码语言:javascript复制kubectl completion bash >/etc/bash_completion.d/kubectl
验证,输入kubectl g,然后按tab自动补全
9、Helm安装
只在master上执行
Helm安装
代码语言:javascript复制#安装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
代码语言:javascript复制yum install -y bash-completion
配置bash-completion
代码语言:javascript复制source /usr/share/bash-completion/bash_completion
设置helm自动补全
代码语言:javascript复制source <(helm completion bash)
添加helm到bash-completion配置文件中去
代码语言:javascript复制helm completion bash > /etc/bash_completion.d/helm
验证,输入helm i,然后按tab自动补全
10、安装ingress-nginx
添加ingress-nginx仓库
代码语言:javascript复制helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
查看ingress-nginx所有版本
代码语言:javascript复制helm search repo ingress-nginx --versions
拉取指定版本chart包
代码语言:javascript复制helm pull ingress-nginx/ingress-nginx --version 4.0.17
解压chart包
代码语言:javascript复制tar -xzvf ingress-nginx-4.0.17.tgz
打开values配置文件
代码语言:javascript复制vi ingress-nginx/values.yaml
修改如下参数
registry和image是修改镜像仓库和镜像名为阿里云的仓库(该仓库为个人用户仓库)。官方镜像国内网络基本拉取不下来,默认配置使用Deployment控制器,副本数为1。你可以修改为DaemonSet,每个节点部署一个pod,此处使用nodeSelector将ingress控制器固定在master上
代码语言:javascript复制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
创建命名空间
代码语言:javascript复制kubectl create namespace ingress-nginx
安装ingess-nginx
代码语言:javascript复制helm install ingress-nginx ingress-nginx -n ingress-nginx
查看pod
代码语言:javascript复制kubectl get pod -n ingress-nginx -o wide
扩容
代码语言:javascript复制#进行扩容,目的就是达到高可用
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工具
所有节点都执行
代码语言:javascript复制yum install -y nfs-utils
安装nfs服务器
nfs服务器才执行
创建持久化存储目录
代码语言:javascript复制mkdir -p /data/nfs
配置访问权限
代码语言:javascript复制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
设置开机自启
代码语言:javascript复制systemctl enable rpcbind.service
systemctl enable nfs-server.service
启动服务
代码语言:javascript复制systemctl start rpcbind.service
systemctl start nfs-server.service
添加nfs动态存储
添加nfs-subdir-external-provisioner仓库
代码语言:javascript复制helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
查看nfs-subdir-external-provisioner所有版本
代码语言:javascript复制helm search repo nfs-subdir-external-provisioner --versions
拉取指定版本chart包
代码语言:javascript复制helm pull nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --version 4.0.14
解压chart包
代码语言:javascript复制tar -xzvf nfs-subdir-external-provisioner-4.0.14.tgz
打开values配置文件
代码语言:javascript复制vi nfs-subdir-external-provisioner/values.yaml
修改如下参数
代码语言:javascript复制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行,设置存储类资源名称
创建命名空间
代码语言:javascript复制kubectl create namespace nfs-storage
安装nfs-subdir-external-provisioner
代码语言:javascript复制helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner -n nfs-storage
查看pod
代码语言:javascript复制kubectl get pod -n nfs-storage
测试
创建PVC的yaml文件
代码语言:javascript复制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
代码语言:javascript复制#一键创建
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
代码语言:javascript复制kubectl apply -f test-pvc.yaml -n nfs-storage
查看pvc和pv是否创建
代码语言:javascript复制kubectl get pvc,pv -n nfs-storage
清理
删除chart压缩包
解压出来的文件夹,不建议删除,可用于恢复和更改服务
代码语言:javascript复制rm -rf nfs-subdir-external-provisioner-4.0.14.tgz
删除pvc,会根据配置规则删除pv
代码语言:javascript复制kubectl delete -f test-pvc.yaml -n nfs-storage
删除pvc的yaml文件
代码语言:javascript复制rm -rf test-pvc.yaml
进入nfs目录
代码语言:javascript复制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
创建配置文件
代码语言:javascript复制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
生成根证书
生成根证书私钥
代码语言:javascript复制openssl genrsa -out root.key 2048
生成根证书请求文件
代码语言:javascript复制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"
生成根证书
代码语言:javascript复制-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
代码语言:javascript复制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
签发应用证书
生成应用私钥
代码语言:javascript复制openssl genrsa -out test.key 2048
生成test.anson.cn域名证书请求文件
代码语言:javascript复制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为证书序列号文件
代码语言:javascript复制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服务
为测试应用添加域名
代码语言:javascript复制#添加证书到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
代码语言:javascript复制# 将受信任的根证书下载到 /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也建议保留
代码语言:javascript复制rm -rf root.csr test.csr
13、集群部署harbor
添加harbor仓库
代码语言:javascript复制helm repo add harbor https://helm.goharbor.io
查看harbor所有版本
代码语言:javascript复制helm search repo harbor/harbor --versions
拉取指定版本chart包
代码语言:javascript复制helm pull harbor/harbor --version 1.8.0
解压chart包
代码语言:javascript复制tar -xzvf harbor-1.8.0.tgz
创建命名空间
代码语言:javascript复制kubectl create namespace harbor
生成证书并添加到k8s的secret
代码语言:javascript复制#添加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配置文件
代码语言:javascript复制vi harbor/values.yaml
修改如下参数
可以默认参数,但是如果用自己的域名就需要修改了,生成自签证书,具体步骤请参考Openssl生成自签证书,注意SANs要包含harbor.anson.cn和harbor-notary.anson.cn这两个域名,最后需要2个文件,应用证书harbor.crt和应用私钥harbor.key
代码语言:javascript复制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
代码语言:javascript复制helm install harbor harbor -n harbor
查看pod
代码语言:javascript复制kubectl get pod -n harbor
windows设置hosts,修改C:WindowsSystem32driversetchosts文件,添加如下配置
192.168.0.66为master节点的IP地址,ingress-nginx-controller控制器在master上,请自行修改为相应IP地址。如果修改不了,需要修改hosts文件的权限,或者新建一个文本文件重命名为hosts
代码语言:javascript复制192.168.0.66 harbor.anson.cn
浏览器访问harbor
默认、用户名为admin 密码为Harbor12345。 https://harbor.anson.cn
测试
登录harbor,新建test项目
选择测试节点,添加hosts解析记录
代码语言:javascript复制cat >> /etc/hosts << EOF
192.168.0.66 harbor.anson.cn
EOF
信任私有仓库
信任根证书(方式1 推荐)
拷贝根证书到信任证书目录
代码语言:javascript复制cp root.crt /etc/pki/ca-trust/source/anchors/root.crt
更新信任证书列表
代码语言:javascript复制update-ca-trust
重启docker
代码语言:javascript复制systemctl restart docker
添加insecure-registries(方式2)
打开docker配置文件
代码语言:javascript复制vi /etc/docker/daemon.json
添加insecure-registries
代码语言:javascript复制{
"insecure-registries": ["harbor.anson.cn"]
}
重新加载配置
代码语言:javascript复制systemctl reload docker
登录harbor
代码语言:javascript复制docker login harbor.anson.cn
docker login harbor.anson.cn -u admin -p Harbor12345
拉取nginx镜像
代码语言:javascript复制docker pull nginx:latest
添加tag
代码语言:javascript复制docker tag nginx:latest harbor.anson.cn/test/nginx:latest
推送到harbor仓库
代码语言:javascript复制docker push harbor.anson.cn/test/nginx:latest
查看仓库
删除本地nginx镜像
代码语言:javascript复制docker rmi nginx:latest
docker rmi harbor.anson.cn/test/nginx:latest
拉取镜像
代码语言:javascript复制docker pull harbor.anson.cn/test/nginx:latest
清理
删除nginx容器
代码语言:javascript复制docker rmi harbor.anson.cn/test/nginx:latest
删除chart压缩包
解压出来的文件夹,不建议删除,可用于恢复和更改服务
代码语言:javascript复制rm -rf harbor-1.8.0.tgz
登录harbor,依次删除nginx镜像仓库,删除test项目
14、集群部署gitlab
添加gitlab仓库
代码语言:javascript复制helm repo add gitlab https://charts.gitlab.io/
查看gitlab所有版本
代码语言:javascript复制helm search repo gitlab/gitlab --versions
拉取指定版本chart包
代码语言:javascript复制helm pull gitlab/gitlab --version 5.5.2
解压chart包
代码语言:javascript复制tar -xzvf gitlab-5.5.2.tgz
创建命名空间
代码语言:javascript复制kubectl create namespace gitlab
添加证书到集群secret中
代码语言:javascript复制#生成应用私钥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配置文件
代码语言:javascript复制vi gitlab/values.yaml
修改如下参数
生成自签证书,具体步骤请参考Openssl生成自签证书,注意SANs要包含gitlab.anson.cn和minio.anson.cn、registry.anson.cn这三个域名,最后需要2个文件,应用证书gitlab.crt和应用私钥gitlab.key
代码语言:javascript复制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构建服务,如果有需要,自行开启
代码语言:javascript复制#其他设置
gitlab/values.yaml中取消sidekiq安装
#文件中资源2.5G调整,不需要这么多 340行
gitlab/charts/gitlab/charts/webservice/values.yaml
安装gitlab
代码语言:javascript复制helm install gitlab gitlab -n gitlab
查看pod
代码语言:javascript复制kubectl get pod -n gitlab
设置hosts
192.168.0.66为master节点的IP地址,ingress-nginx-controller控制器在master上,请自行修改为相应IP地址。如果修改不了,需要修改hosts文件的权限,或者新建一个文本文件重命名为hosts
代码语言:javascript复制192.168.0.66 gitlab.anson.cn
浏览器访问gitlab
代码语言:javascript复制https://gitlab.anson.cn
获取root密码
minio,redis,portgresql等密码都在相应的secret中
代码语言:javascript复制kubectl get secret gitlab-gitlab-initial-root-password -n gitlab -ojsonpath='{.data.password}' | base64 --decode ; echo
#root密码
UsM0UJ4qcHh4W1HQnJ9WThHMmfDquxU8xPNsI2eVmAW6IjeRJ46PNIJKazTyi1KW
hudingwen
#token令牌
HfGbHDaKPQcPy_hKXknx
测试
登录gitlab
代码语言:javascript复制#设置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:UsersAdministrator.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
代码语言:javascript复制#测试ssh
ssh -T git@gitlab.anson.cn
#测试是否正常
ssh -vT git@gitlab.anson.cn -p 32022
ssh-add C:UsersAdministrator.sshid_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
代码语言:javascript复制git config --global http.sslbackend schannel
克隆仓库到本地,输入账号和密码
代码语言:javascript复制git clone https://gitlab.anson.cn/gitlab-instance-98897215/Monitoring.git
在文件下新建README.md文件
添加README.md文件到暂存区
代码语言:javascript复制git add README.md
提交到本地仓库
代码语言:javascript复制git commit -m 添加README.md文件测试
推送到gitlab仓库
代码语言:javascript复制git push origin