k8s无脑系列-创建私有仓库
Posted smokelee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 --username=xxxx@aliyun.com 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-username=xxxxxxx@qq.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>
以上是关于k8s无脑系列-创建私有仓库的主要内容,如果未能解决你的问题,请参考以下文章
k8s从私有仓库拉取镜像创建pod时ImagePullBackOff