在k8s中创建凭证
首先在节点docker登录harbor, 登录成功之后会在$HOME/.docker/ 生成一个config.json文件,这个就是登录凭证,后面docker pull就不需要再登录了。但是如果在k8s发布pod或者deploment时,这个凭证要在k8s中创建一个对应secret,然后挂载到pod 或 deployment中的yaml中,这样k8s才能下载镜像,否则提示权限验证错误。
生成凭证:
yaml
kubectl create secret generic harborregcred[凭证的名称] --from-file=.dockerconfigjson=$HOME/.docker/config.json --type=kubernetes.io/dockerconfigjson
insecure-registries配置
docker1.3.2版本开始默认docker registry使用的是https,我们设置Harbor默认http方式,所以当执行用docker login、pull、push等命令操作非https的docker regsitry的时就会报错。
解决办法:配置/etc/docker/daemon.json,在需要连接Harbor仓库的机器上面,编辑/etc/docker/daemon.json,如果没有就要创建文件,添加以下内容。注意不是安装harbor的机器
yaml
{
"registry-mirrors": ["https://hccwwfjl.mirror.aliyuncs.com"],
"insecure-registries":["harbor的ip地址:端口号"]
}
重启docker 服务: systemctl daemon-reload && systemctl restart docker
创建命名空间
yaml
若不指定命名空间会到default里
命令创建: kubectl create namespace demo
kuboard面板创建: 直接新建
使用 deployment 部署 pod
命令创建: kubectl apply -f deployment.yml
kuboard面板创建: 从yaml新建
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-spring-boot-app
namespace: demo
spec:
replicas: 2
selector:
matchLabels:
app: my-spring-boot-app
template:
metadata:
labels:
app: my-spring-boot-app
spec:
containers:
- name: my-spring-boot-app
image: 'harbor的ip:端口/项目名/镜像名:标签'
ports:
- containerPort: 8080
使用 Service使应用程序可以从集群外部访问
命令创建: kubectl apply -f service.yml
kuboard面板创建: 从yaml新建
yaml
apiVersion: v1
kind: Service
metadata:
name: my-spring-boot-app-service
namespace: vmware-local
spec:
selector:
app: my-spring-boot-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: LoadBalancer
References:
Linux登录连接Harbor报错http: server gave HTTP response to HTTPS client
【k8s】k8s集群中拉取需要登录的私有镜像库
Kubernetes(k8s)常用yaml配置和注释详解
Kubernetes(k8s)Ingress原理
K8S中的ingress