一、部署docker registry

           生产环境中我们一般通过搭建本地的私有镜像仓库(docker registry)来拉取镜像。

1、拉取registry镜像

  1. [root@k8s-master ~]#docker pull docker.io/registry
  2. Using default tag: latest
  3. Trying to pull repository docker.io/library/registry ...
  4. sha256:0e40793ad06ac099ba63b5a8fae7a83288e64b50fe2eafa2b59741de85fd3b97: Pulling from docker.io/library/registry
  5. b7f33cc0b48e: Pull complete
  6. 46730e1e05c9: Pull complete
  7. : Pull complete
  8. 0cf045fea0fd: Pull complete
  9. b78a03aa98b7: Pull complete
  10. Digest: sha256:0e40793ad06ac099ba63b5a8fae7a83288e64b50fe2eafa2b59741de85fd3b97
  11. Status: Downloaded newer image for docker.io/registry:latest

2、启动registry

  1. docker run -d -p : --name=registry --restart=always --privileged=true --log-driver=none -v /home/data/registrydata:/tmp/registry registry

注:/home/data/registrydata是一个比较大的系统分区,今后镜像仓库中的全部数据都会保存在这个外挂目录下

3、Node节点改名并推送镜像

①以部署dashboard的镜像为例,后面也会用到

  1. 百度云下载链接:https://pan.baidu.com/s/1geKEADt#list/path=%2F 密码:lbyp

②上传到Node节点并推送到镜像仓库

  1. docker load < dashboard.tar
  2. docker load < podinfrastructure.tar
  3. docker tag gcr.io/google_containers/kubernetes-dashboard-amd64:v1.7.1 10.0.0.211:/google_containers/kubernetes-dashboard-amd64:latest
  4. docker tag registry.access.redhat.com/rhel7/pod-infrastructure:latest 10.0.0.211:/rhel7/pod-infrastructure:latest
  5.  
  6. docker push 10.0.0.211:/google_containers/kubernetes-dashboard-amd64:latest
  7. docker push 10.0.0.211:/rhel7/pod-infrastructure:latest

推送失败报错

  1. Get https://10.0.0.211:5000/v1/_ping: http: server gave HTTP response to HTTPS client

解决办法

  1. ①种方法:vim /etc/sysconfig/docker加入
  2. OPTIONS='--insecure-registry 10.0.0.211:5000'
  3. ②种方法
  4. echo '{ "insecure-registries":["10.0.0.211:5000"] }' > /etc/docker/daemon.json
  5. systemctl restart docker.service

4、Master节点从本地仓库拉取镜像

  1. docker pull 10.0.0.211:/google_containers/kubernetes-dashboard-amd64:latest
  2. docker pull 10.0.0.211:/rhel7/pod-infrastructure

查看:

二、部署dashboard

1、编辑dashboard.yaml文件

  1. apiVersion: extensions/v1beta1
  2. kind: Deployment
  3. metadata:
  4. # Keep the name in sync with image version and
  5. # gce/coreos/kube-manifests/addons/dashboard counterparts
  6. name: kubernetes-dashboard-latest
  7. namespace: kube-system
  8. spec:
  9. replicas:
  10. template:
  11. metadata:
  12. labels:
  13. k8s-app: kubernetes-dashboard
  14. version: latest
  15. kubernetes.io/cluster-service: "true"
  16. spec:
  17. containers:
  18. - name: kubernetes-dashboard
  19. image: 10.0.0.211:/google_containers/kubernetes-dashboard-amd64:latest
  20. resources:
  21. # keep request = limit to keep this container in guaranteed class
  22. limits:
  23. cpu: 100m
  24. memory: 50Mi
  25. requests:
  26. cpu: 100m
  27. memory: 50Mi
  28. ports:
  29. - containerPort:
  30. args:
  31. - --apiserver-host=http://10.0.0.211:8080
  32. livenessProbe:
  33. httpGet:
  34. path: /
  35. port:
  36. initialDelaySeconds:
  37. timeoutSeconds:

注:Dashboard是在yaml中定义的,要更改dashboard.yaml中对应的“image: gcr.io/google_containers/kubernetes-dashboard-amd64:v1.5.1”为“image: 10.0.0.211:5000/kubernetes-dashboard-amd64:latest”

 2、编辑dashboardsvc.yaml文件

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: kubernetes-dashboard
  5. namespace: kube-system
  6. labels:
  7. k8s-app: kubernetes-dashboard
  8. kubernetes.io/cluster-service: "true"
  9. spec:
  10. selector:
  11. k8s-app: kubernetes-dashboard
  12. ports:
  13. - port:
  14. targetPort:

3、Master节点创建启动命令

  1. kubectl create -f dashboard.yaml
  2. kubectl create -f dashboardsvc.yaml

4、Master执行命令验证

  1. [root@k8s-master ~]# kubectl get deployment --all-namespaces
  2. NAMESPACE NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
  3. kube-system kubernetes-dashboard-latest 3h
  4. [root@k8s-master ~]# kubectl get svc --all-namespaces
  5. NAMESPACE NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  6. default kubernetes 10.254.0.1 <none> /TCP 2d
  7. kube-system kubernetes-dashboard 10.254.233.11 <none> /TCP 3h
  8. [root@k8s-master ~]# kubectl get pod -o wide --all-namespaces
  9. NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE
  10. kube-system kubernetes-dashboard-latest--09p76 / Running 3h 172.16.6.2 k8s-node-

5、浏览器访问

  1. http://10.0.0.211:8080/ui

6、销毁应用

Master节点执行

  1. kubectl delete deployment kubernetes-dashboard-latest --namespace=kube-system
  2. kubectl delete svc kubernetes-dashboard --namespace=kube-system

三、部署遇到的问题

问题1:

  1. {
  2. "kind": "Status",
  3. "apiVersion": "v1",
  4. "metadata": {},
  5. "status": "Failure",
  6. "message": "no endpoints available for service \"kubernetes-dashboard\"",
  7. "reason": "ServiceUnavailable",
  8. "code":
  9. }

解决:需要pause-amd64这个镜像

  1. docker pull googlecontainer/pause-amd64:3.0
  2. docker tag googlecontainer/pause-amd64:3.0 gcr.io/google_containers/pause-amd64:3.0
  1. kubectl delete -f dashboard.yaml
  2. kubectl delete -f dashboardsvc.yaml
  3.  
  4. kubectl create -f dashboard.yaml
  5. kubectl create -f dashboardsvc.yaml

详细查看报错问题

  1. kubectl describe pod kubernetes-dashboard-latest-bf59c4df4-xcblq --namespace kube-system

问题2:部署完成之后访问浏览器报错

  1. Error: 'dial tcp 172.16.6.2:9090: getsockopt: connection refused'
  2. Trying to reach: 'http://172.16.6.2:9090/'

解决:iptables拦截

  1. iptables -P FORWARD ACCEPT 或者 echo "net.ipv4.ip_forward = 1" >>/usr/lib/sysctl.d/50-default.conf

 如果永久生效的话,可以修改docker服务启动脚本

  1. vim /etc/systemd/system/docker.service #增加一行
  2. [Service]
  3. ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/ -j ACCEPT

总结排查方法:

①检查apiserver的地址设置的是否正确,然后就是flannel是否配置启动,确保docker0和flannel0处于同一网段

②查看master和nodes上的flannel配置是否一致

  1. # Flanneld configuration options
  2.  
  3. # etcd url location. Point this to the server where etcd runs
  4. FLANNEL_ETCD_ENDPOINTS="http://10.0.0.211:2379"
  5.  
  6. # etcd config key. This is the configuration key that flannel queries
  7. # For address range assignment
  8. FLANNEL_ETCD_PREFIX="/atomic.io/network"
  9.  
  10. # Any additional options that you want to pass
  11. #FLANNEL_OPTIONS=""

③检查iptables -L,检查node节点上的FORWARD 查看转发是否是drop,如果是drop,则开启

  1. iptables -P FORWARD ACCEPT
  2. 或者
  3. echo "net.ipv4.ip_forward = 1" >>/usr/lib/sysctl.d/-default.conf

linux运维、架构之路-Kubernetes本地镜像仓库+dashboard部署的更多相关文章

  1. linux运维架构师职业规划

    1.假如你从来未接触过Linux的话,首先要做的就找一本指导书来学习.现在公认的Linux的入门书籍是“鸟哥的私房菜”,讲的很全面,鸟哥的私房菜一共分为两部,一部是基础篇,一部是服务器篇.“鸟哥的私房 ...

  2. 微服务架构 - 基于Harbor构建本地镜像仓库

    之前写过<搭建docker本地镜像仓库并提供权限校验及UI界面>文章,然后有同仁评论道这样做太复杂了,如果Harbor来搭建会更简单同时功能也更强大.于是抽时间研究了基于Harbor构建本 ...

  3. Kubernetes学习之路(28)之镜像仓库Harbor部署

    Harbor的部署 官方文档 Harbor有两种安装的方式: 在线安装:直接从Docker Hub下载Harbor的镜像,并启动. 离线安装:在官网上下载离线安装包其地址为:https://githu ...

  4. 干货 | 京东云托管Kubernetes集成镜像仓库并部署原生DashBoard

    在上一篇"Cloud Native 实操系列"文章中,我们为大家介绍了如何通过京东云原生容器实现Eureka的部署(

  5. [ Linux运维学习 ] 路径及实战项目合集

    我们知道运维工程师(Operations)最基本的职责就是负责服务的稳定性并确保整个服务的高可用性,同时不断优化系统架构.提升部署效率.优化资源利用率,确保服务可以7*24H不间断地为用户提供服务. ...

  6. 从苦逼到牛逼,详解Linux运维工程师的打怪升级之路

    做运维也快四年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点. 运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感 ...

  7. Linux 运维入门到跑路书单推荐

    一.基础入门 <鸟哥的Linux私房菜基础学习篇>:最具知名度的Linux入门书<鸟哥的Linux私房菜基础学习篇>,全面而详细地介绍了Linux操作系统. https://b ...

  8. Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Discuz!

    Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Disc ...

  9. Linux运维企业架构实战系列

    Linux运维企业架构项目实战系列 项目实战1-LNMP的搭建.nginx的ssl加密.权限控制的实现 项目实战2-LVS.nginx实现负载均衡系列 2.1 项目实战2.1-实现基于LVS负载均衡集 ...

随机推荐

  1. visual studio 的 code snippet(代码片段)

    visual studio自带代码片段,用了6年visual studio才知道有这么个玩意……惭愧 最简单例子 for循环,for,连点两下tab……自己研究吧

  2. 什么是SLF,PSL,MLF,SLO?

    受国际经济金融形势不确定性增强以及各种影响流动性的因素波动较大影响,近年来我国银行体系短期流动性供求的波动性有所加大,尤其是当多个因素相互叠加或市场预期发生变化时,有可能出现市场短期资金供求缺口难以通 ...

  3. lua正则表达式替换字符串

    local _t = {} _t.name = "Li" local str = string.gsub("hahah---[name]----[age]--xrz-&q ...

  4. SIRIM上海,http://www.sirim-global.com

    SIRIM上海 http://www.sirim-global.com

  5. k8s/01开启云原生之门(Mooc)

    一.kubernetes(k8s)基础知识 1.简介 在2017年Kubernetes战胜了两个强大的竞争对手Swarm和Mesos,成为容器管理与调度编排领域的首选平台和事实标准. 2014年k8s ...

  6. vue+sentry 前端异常日志监控

    敲代码最糟心不过遇到自己和测试的环境都OK, 客户使用有各种各样还复现不了的问题,被逼无奈只能走到这一步:前端异常日志监控! vue官方文档如下推荐: 就是说, vue有错误机制处理errorHand ...

  7. SpringBoot 单元测试junit test

    pom引用 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http: ...

  8. win10上的Django项目实现内网映射

    网上有很多关于django项目发布uwsgi模块在 windows上的下载以及安装过程, 可是他们也并没有真正的在windows上使用到这个模块(至少目前在网上还没看到过), 而大部分人就是在Djan ...

  9. Scrapy 教程(十)-管道与数据库

    Scrapy 框架将爬取的数据通过管道进行处理,即 pipelines.py 文件. 管道处理流程 一.定义 item item 表示的是数据结构,定义了数据包括哪些字段 class TianqiIt ...

  10. linux 环境 Xshell操作数据库

    一:采用sqlplus连接登录(确保安装了sqlplus) 1:先登陆进入到oracle的数据库的服务器环境下 2:切换到sqlplus操作:  sqlplus /nolog 3:conn /as s ...