实验环境
master 10.6.191.181 node1 10.6.191.182 node2 10.6.191.183 本地私有仓库 10.6.191.184
一、安装本地私有仓库
1、安装docker
yum install -y docker
service docker restart
2、下载Docker registry镜像,并启动私有仓库
docker pull registry mkdir -p /data/registry/ docker run -itd -p 5000:5000 -v /data/registry:/var/lib/registry docker.io/registry
默认情况下,会将仓库存放于容器内的/tmp/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录挂载到容器内的/tmp/registry下。
二、Kubernetes 使用本地私有仓库构建kubernetes-dashboard
1、docker私有仓库配置
1)从网盘中下载并导入kubernetes-dashboard和pod-infrastructure(或者docker search这两个镜像,然后pull)
将两个镜像都改名为。
10.6.191.184:5000/kubernetes-dashboard-amd64:latest 10.6.191.184:5000/pod-infrastructure:latest
2)vim /etc/sysconfig/docker,添加红色代码:
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --insecure-registry gcr.io --insecure-registry 10.6.191.184:
5000'
重启docker
service docker restart
3)上传镜像到仓库
docker push 10.6.191.184:5000/kubernetes-dashboard-amd64:latest docker push 10.6.191.184:5000/pod-infrastructure:latest
4)检测本地私有仓库
curl -XGET http://10.6.191.184:5000/v2/_catalog
curl -XGET http://10.6.191.184:5000/v2/kubernetes-dashboard-amd64/tags/list
2、node节点配置
1)node节点docker配置文件添加如下代码,同时重启docker服务,获取本地私有仓库。vim /etc/sysconfig/docker
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false
ADD_REGISTRY='--add-registry 10.6.191.184:5000'
#添加私有仓库
2)需要在Docker主机添加本地仓库地址,/etc/docker/daemon.json文件中代码如下,并重启docker:
cat > /etc/docker/daemon.json << EOF { "insecure-registries":["10.6.191.184:5000"] } EOF
service docker restart
3)修改/etc/kubernetes/kubele
配置文件将KUBELET_POD_INFRA_CONTAINER选项注释,同时添加一个新的KUBELET_POD_INFRA_CONTAINER参数,代码如下,前提需要将pod-infrastructure镜像上传私有仓库。
#KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest" KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=10.6.191.184:5000/pod-infrastructure:latest"
4)在每台nodes上重启kubelet服务
systemctl restart kubelet.service
ps:
1、当构造kubernetes-dashboard报错。
查看pod描述
kubectl get pods --all-namespaces
kubectl describe pods/kubernetes-dashboard-3671102549-hptlr --namespace="kube-system"
原因:缺少gcr.io/google_containers/pause-amd64:3.0基础镜像
解决办法:在所有节点都下载这个基础镜像,新版本的Kubernetes在安装部署中,需要从k8s.grc.io仓库中拉取所需镜像文件,但由于国内网络防火墙问题导致无法正常拉取,不能 直接下载这个镜像,所有拉去其他源的镜像,并改tag。
docker search pause-amd64 docker pull docker.io/huangyj/pause-amd64 docker tag docker.io/huangyj/pause-amd64:latest gcr.io/google_containers/pause-amd64:3.0 docker rmi docker.io/huangyj/pause-amd64
2、在/etc/sysconfig/docker和/etc/docker/daemon.json不能同时有insecure-registries,报错了
解决办法:只在/etc/docker/daemon.json添加,在/etc/sysconfig/docker不添加。
3、master端配置
1)创建kube-namespace.yaml
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: kubernetes-dashboard namespace: kube-system labels: k8s-app: kubernetes-dashboard kubernetes.io/cluster-service: "true" spec: selector: matchLabels: k8s-app: kubernetes-dashboard template: metadata: labels: k8s-app: kubernetes-dashboard annotations: scheduler.alpha.kubernetes.io/critical-pod: '' scheduler.alpha.kubernetes.io/tolerations: '[{"key":"CriticalAddonsOnly", "operator":"Exists"}]' spec: containers: - name: kubernetes-dashboard image: 10.6.191.184:5000/kubernetes-dashboard-amd64:latest resources: # keep request = limit to keep this container in guaranteed class limits: cpu: 100m memory: 50Mi requests: cpu: 100m memory: 50Mi ports: - containerPort: 9090 args: - --apiserver-host=http://10.6.191.181:8080 livenessProbe: httpGet: path: / port: 9090 initialDelaySeconds: 30 timeoutSeconds: 30 --- apiVersion: v1 kind: Service metadata: name: kubernetes-dashboard namespace: kube-system labels: k8s-app: kubernetes-dashboard kubernetes.io/cluster-service: "true" spec: selector: k8s-app: kubernetes-dashboard ports: - port: 80 targetPort: 9090
2)创建dashboard
kubectl create -k kube-dashboard.yaml
3)查看状态
kubectl get pods --all-namespaces