Kubernetes-连接Harbor仓库拉取镜像
补充一个内容
--pod-infra-container-image=10.192.27.111/library/nginx:1.15" #由于公司没有互联网,暂时用这个nginx:1.15作为基础镜像
--pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0" #阿里云提供谷歌的基础镜像
kubelet参数pod-infra-container-image什么意思?
如题,在node端的kubelet配置文件中发现这个参数,默认值是这样的
KUBELET_POD_INFRA_CONTAINER=--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest
查看观官网,他那解释我也没看懂,这个参数是干什么呢?为什么我在node上每启动一个容器,就会启动一个registry.access.redhat.com/rhel7/pod-infrastructure:latest这个镜像?
解释:这个是一个基础容器,每一个Pod启动的时候都会启动一个这样的容器。如果你的本地没有这个镜像,kubelet会连接外网把这个镜像下载下来。(最开始的时候是在Google的registry上,因此国内因为GFW都下载不了导致Pod运行不起来。)
现在每个版本的Kubernetes都把这个镜像打包,你可以提前传到自己的registry上,然后再用这个参数指定。
一、Kubernetes-连接Harbor仓库(公共库:不需要密码的)拉取镜像
准备工作
Harbor 镜像仓库服务器,我的服务器IP是10.192.27.111;
Kubernetes集群搭建(看以前的博客)
node01(10.192.27.115)和node02(10.192.27.116) 两个节点的kubelet配置文件都要修改并重启kubelet
#默认安装时的配置文件:--pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0"
[root@node01 cfg]# cat kubelet.bak KUBELET_OPTS="--logtostderr=true \ --v=4 \ --hostname-override=10.192.27.115 \ --kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig \ --bootstrap-kubeconfig=/opt/kubernetes/cfg/bootstrap.kubeconfig \ --config=/opt/kubernetes/cfg/kubelet.config \ --cert-dir=/opt/kubernetes/ssl \ --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0" [root@node01 cfg]#
#修改后:--pod-infra-container-image=10.192.27.111/library/nginx:1.15"
[root@node01 ~]# cd /opt/kubernetes/cfg/ [root@node01 cfg]# cat kubelet KUBELET_OPTS="--logtostderr=true \ --v=4 \ --hostname-override=10.192.27.115 \ --kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig \ --bootstrap-kubeconfig=/opt/kubernetes/cfg/bootstrap.kubeconfig \ --config=/opt/kubernetes/cfg/kubelet.config \ --cert-dir=/opt/kubernetes/ssl \ --pod-infra-container-image=10.192.27.111/library/nginx:1.15" [root@node01 cfg]#
重启服务
[root@node01 cfg]# systemctl restart kubelet [root@node01 cfg]# ps -ef | grep kube root 16473 1 0 11月12 ? 00:11:08 /opt/kubernetes/bin/kube-proxy --logtostderr=true --v=4 --hostname-override=10.192.27.115 --cluster-cidr=10.0.0.0/24 --proxy-mode=ipvs --kubeconfig=/opt/kubernetes/cfg/kube-proxy.kubeconfig root 28574 1 0 11月08 ? 00:07:31 /opt/kubernetes/bin/flanneld --ip-masq --etcd-endpoints=https://10.192.27.100:2379,https://10.192.27.115:2379,https://10.192.27.116:2379 -etcd-cafile=/opt/etcd/ssl/ca.pem -etcd-certfile=/opt/etcd/ssl/server.pem -etcd-keyfile=/opt/etcd/ssl/server-key.pem root 124917 1 14 16:13 ? 00:00:00 /opt/kubernetes/bin/kubelet --logtostderr=true --v=4 --hostname-override=10.192.27.115 --kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig --bootstrap-kubeconfig=/opt/kubernetes/cfg/bootstrap.kubeconfig --config=/opt/kubernetes/cfg/kubelet.config --cert-dir=/opt/kubernetes/ssl --pod-infra-container-image=10.192.27.111/library/nginx:1.15 root 125031 18416 0 16:14 pts/0 00:00:00 grep --color=auto kube
任意master节点操作 运行测试
[root@master01 yaml_doc]# pwd /root/yaml_doc [root@master01 yaml_doc]# cat nginx-deploy.yaml apiVersion: apps/v1beta2 kind: Deployment metadata: name: nginx-deployment namespace: default labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: 10.192.27.111/library/nginx:1.14 #要拉取镜像的路径 imagePullPolicy: IfNotPresent command: [ "/bin/bash", "-ce", "tail -f /dev/null" ] # 防止Back-off restarting failed container报错 ports: - containerPort: 80 [root@master01 yaml_doc]# kubectl apply -f nginx-deploy.yaml deployment.apps/nginx-deployment created [root@master01 yaml_doc]# kubectl get pods NAME READY STATUS RESTARTS AGE nginx-deployment-f9bbbf4b-5ccfh 1/1 Running 0 2s nginx-deployment-f9bbbf4b-brpfl 1/1 Running 0 2s nginx-deployment-f9bbbf4b-lgvjl 1/1 Running 0 2s [root@master01 yaml_doc]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-deployment-f9bbbf4b-5ccfh 1/1 Running 0 6s 172.17.46.3 10.192.27.116 <none> <none> nginx-deployment-f9bbbf4b-brpfl 1/1 Running 0 6s 172.17.46.2 10.192.27.116 <none> <none> nginx-deployment-f9bbbf4b-lgvjl 1/1 Running 0 6s 172.17.43.2 10.192.27.115 <none> <none> [root@master01 yaml_doc]# cat nginx-service.yaml apiVersion: v1 kind: Service metadata: name: nginx-service-chao labels: app: nginx spec: type: NodePort ports: - port: 80 nodePort: 30080 selector: app: nginx [root@master01 yaml_doc]# kubectl apply -f nginx-service.yaml service/nginx-service-chao created [root@master01 yaml_doc]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 3d5h nginx-service-chao NodePort 10.0.0.69 <none> 80:30080/TCP 15s [root@master01 yaml_doc]#
![](https://img2018.cnblogs.com/blog/1169561/201911/1169561-20191114164417149-1807139631.png)
pod报错"Back-off restarting failed container"解决办法
https://blog.csdn.net/sqhren626232/article/details/101013390
二、Kubernetes-连接Harbor仓库拉取镜像(参考https://www.jianshu.com/p/010e4a7afe5e)
准备工作
- Harbor 镜像仓库服务器,我的服务器IP是10.192.27.111;
- Kubernetes集群节点能通过【docker login】命令登录Harbor仓库,详细设置步骤参考这篇博文
开始配置
- 创建secret
kubectl create secret docker-registry registry-harbor --namespace=default \ --docker-server=10.192.27.111 --docker-username=admin \ --docker-password=Harbor12345 --docker-email=mxxl@zte.com.cn
secret-name: secret的名称 namespace: 命名空间 docker-server: Harbor仓库地址 默认80端口 docker-username: Harbor仓库登录账号 docker-password: Harbor仓库登录密码 docker-email: 邮件地址
![](https://upload-images.jianshu.io/upload_images/12975960-2c3fc6ca96ba9faf.png?imageMogr2/auto-orient/strip|imageView2/2/w/694/format/webp)
- 创建yaml文件,我这里以nginx为例创建了一个
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: 192.168.242.132/library/nginx:1.15.1 imagePullPolicy: Always ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: nginx-service spec: type: NodePort sessionAffinity: ClientIP selector: app: nginx ports: - port: 80 nodePort: 30080
执行命令创建
kubectl create -f deploy-nginx.yaml
创建完成后查看Pods
kubectl create -f deploy-nginx.yaml
![](https://upload-images.jianshu.io/upload_images/12975960-35eae6b4b6e76ac2.png?imageMogr2/auto-orient/strip|imageView2/2/w/592/format/webp)
最后可以通过浏览器来验证一下,yaml文件中定义对外暴露的端口是30080,现在在浏览器中可以输入Kubernetes集群任意节点的IP加上30080端口,我这里输入master节点的IP,http://192.168.242.136:30080/,可以正常看到nginx界面
![](https://upload-images.jianshu.io/upload_images/12975960-0c909ae1acb33344.png?imageMogr2/auto-orient/strip|imageView2/2/w/956/format/webp)
那么这个镜像到底部署在哪个节点上呢,可以通过如下命令查看
kubectl get pods -n default -o wide
![](https://upload-images.jianshu.io/upload_images/12975960-483168ef3c594684.png?imageMogr2/auto-orient/strip|imageView2/2/w/817/format/webp)