k8s无脑系列(五)-创建私有仓库(一)
k8s无脑系列-创建私有仓库(一)
1. 意义
与CI/CD联动
私有库属于公司/组织最重要的线上财产必须得到保护
2. 需要解决的问题
先提出问题,为什么需要Secret?
密码、令牌不能被随意公布。存到集群里,让需要的Pod或者其它资源(rc,pod等)可以拿到必须的令牌内容等等。甚至MySQL之类的密码都可以存储到Secret中。这里不做更多的讨论。仅限于用在私有仓库中这种情景。
2.1 k8s的Pod使用私有仓库时需要认证过程
比如使用阿里云私有仓库(啰嗦一句,自己搭建的一样,阿里的现成可用),虽然Docker可以通过设置/etc/daemon.json实现Pull的过程,但k8s在不通的Node去创建Pod就不行了。Emm,其实也不是不行,总不能给所有Node同步$HOME/.docker/config.json吧。另外不同的namespace为了安全不能用一个账户来操作私有仓库,所以分namespace的认证过程是必须的。
我们先用阿里云这个现成的私有仓库举例子,来观察整个过程。
使用私有仓库镜像时必须先登录
$docker login registry.cn-hangzhou.aliyuncs.com
在$HOME/.docker/config.json可以看到
{ "auths": { "registry.cn-beijing.aliyuncs.com": { "auth": "NzU0NDg5NTUxQHFxLmNvbTptb3dwaWgtd2lwbnlqLWt1bWtVNg==" } } }
$docker pull registry.cn-beijing.aliyuncs.com/smokelee/redis # 私有库
2.2 首先要创建k8s的Secret
假设现在已经有“私有仓库”比如:阿里云
命令行创建
$kubectl create secret docker-registry registry-secret-aliyun --docker-server=registry.cn-beijing.aliyuncs.com --docker-password=xxxxxxx
参数说明:以下参数都可以通过执行下述命令得到说明
$kubectl create secret docker-registry
- docker-registry 该参数有三个值docker-registry、generic、tls
- registry-secret-aliyun Secret的名称,什么名字都可以,随意
- --docker-server 仓库地址
- --docker-username 仓库账户名称
- --docker-password 仓库密码
验证
$kubectl describe secret registry-secret-aliyun Name: registry-secret-aliyun Namespace: default Labels: <none> Annotations: <none> Type: kubernetes.io/dockerconfigjson Data ==== .dockerconfigjson: 113 bytes
yaml文件创建
事实上,docker-registry类型的不能通过这种方式创建,这个yaml是用命令反向推出来的。就是演示。
$kubectl get secret registry-secret-aliyun -o yaml apiVersion: v1 type: kubernetes.io/dockerconfigjson kind: Secret metadata: name: registry-secret-aliyun namespace: default data: .dockerconfigjson: eyJhxxxxxx.......x19
2.3 资源文件使用Secret
apiVersion: v1 kind: ReplicationController metadata: name: redis-ali spec: replicas: 1 selector: app: redis-pod-ali template: metadata: labels: app: redis-pod-ali spec: containers: - name: redis-ali image: registry.cn-beijing.aliyuncs.com/smokelee/redis # 私有镜像 ports: - containerPort: 6379 imagePullSecrets: - name: registry-secret-aliyun # 名字要与创建命令参数保持一致
查看是否已经被其它节点部署,注意node2是节点,此前并未下载过"registry.cn-beijing.aliyuncs.com/smokelee/redis" 这个私有镜像
$kubecel get pod redis-ali -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES mysql-rc-q5pps 1/1 Running 2 2d 10.244.1.7 node1.smokelee.com <none> <none> redis-ali-6s52k 1/1 Running 0 3s 10.244.2.11 node2.smokelee.com <none> <none>
相关推荐
###host字段指定授权使用该证书的etcd节点IP或子网列表,需要将etcd集群的3个节点都添加其中。cp etcd-v3.3.13-linux-amd64/etcd* /opt/k8s/bin/