前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >『高级篇』docker之kubernetes基础集群附在功能kube-proxy和kube-dns(36)

『高级篇』docker之kubernetes基础集群附在功能kube-proxy和kube-dns(36)

作者头像
IT架构圈
发布2018-12-13 15:18:09
7170
发布2018-12-13 15:18:09
举报
文章被收录于专栏:IT架构圈IT架构圈

上次搭建了kubernetes最核心最基础的服务,也学习了一些命令,现在咱们在这个之上proxy和dns,虽然这2个功能非常非常的重要,但是从技术层面他们属于kubernetes的附加组件,可以有也可以没有,如果需要service的功能可以添加kubernetes proxy,如果需要dns通过名字解析服务就需要增加kubernetes dns组件。非必须的功能做成组件的形式,而不是必须安装的形式。这也说明了kubernetes的设计,尽量避免这种强依赖,首先就为集群增加proxy的功能。源码:https://github.com/limingios/msA-docker k8s分支和https://github.com/limingios/kubernetes-starter 基础集群的搭建查看32节到34节

为集群增加service功能 - kube-proxy(工作节点102,103)

简介

每台工作节点上都应该运行一个kube-proxy服务,它监听API server中service和endpoint的变化情况,并通过iptables等来为服务配置负载均衡,是让我们的服务在集群外可以被访问到的重要方式。

部署

通过系统服务方式部署:

代码语言:javascript
复制
#确保工作目录存在
mkdir -p /var/lib/kube-proxy
#复制kube-proxy服务配置文件
cp ~/kubernetes-starter/target/worker-node/kube-proxy.service /lib/systemd/system/
#复制kube-proxy依赖的配置文件
cp ~/kubernetes-starter/target/worker-node/kube-proxy.kubeconfig /etc/kubernetes/

systemctl enable kube-proxy.service
service kube-proxy start
journalctl -f -u kube-proxy
9.3 重点配置说明

kube-proxy.service

[Unit] Description=Kubernetes Kube-Proxy Server ... [Service] #工作目录 WorkingDirectory=/var/lib/kube-proxy ExecStart=/home/michael/bin/kube-proxy \ #监听地址 --bind-address=192.168.1.103 \ #依赖的配置文件,描述了kube-proxy如何访问api-server --kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig \ ...

102的kube-proxy

代码语言:javascript
复制
[Unit]
Description=Kubernetes Kube-Proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target
[Service]
WorkingDirectory=/var/lib/kube-proxy
ExecStart=/root/bin/kube-proxy \
  --bind-address=192.168.66.102 \
  --hostname-override=192.168.66.102 \
  --kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig \
  --logtostderr=true \
  --v=2
Restart=on-failure
RestartSec=5
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

103的kube-proxy

代码语言:javascript
复制
[Unit]
Description=Kubernetes Kube-Proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target
[Service]
WorkingDirectory=/var/lib/kube-proxy
ExecStart=/root/bin/kube-proxy \
  --bind-address=192.168.66.103 \
  --hostname-override=192.168.66.103 \
  --kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig \
  --logtostderr=true \
  --v=2
Restart=on-failure
RestartSec=5
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

kube-proxy.kubeconfig配置了kube-proxy如何访问api-server,内容与kubelet雷同,不再赘述。

操练service
  • 查看service

api的时候就建立的一个service,查看类型是Type:ClusterIp,它有一个虚拟的Ip(10.68.0.1)相当于给apiservice做成了一个服务,一个是集群内的其他组件,可以通过这个ip直接进行访问,不需要依赖具体worker的ip地址了,负载均衡,apiserver的高可用,通过apiserver的ip来完成。上次访问对应的deployment,都是启动代理,然后另一个窗口通过curl的方式来进行访问。

代码语言:javascript
复制
kubectl get services
kubectl describe serivce kubernetes
  • deploy升级成为service

感觉比较乱,命令去执行的2个端口target-port 和port ,在执行service的时候又出现了一个端口,

  1. 随机的端口23492节点启动的端口,可以通过端口访问服务
  2. target-port 这个端口实际启动的端口
  3. port 虚拟ip下需要访问的端口
代码语言:javascript
复制
kubectl expose deploy kubernetes-bootcamp --type="NodePort" --target-port=8080 --port=80
  • worker访问
代码语言:javascript
复制
curl http://192.168.66.103:23492
  • 进入容器内部访问的话

通过docker ps 找到容器id,进入容器exec -it 后

代码语言:javascript
复制
curl http://10.68.99.134:80

都是可以curl通的这是符合k8s的规范的pod之间是互通的。

  • 通过yaml文件将pod生成services
代码语言:javascript
复制
vi nginx-service.yaml
代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  ports:
  - port: 8080
    targetPort: 80
    nodePort: 20000
  selector:
    app: nginx
  type: NodePort

为集群增加dns功能 - kube-dns(app)

简介

kube-dns为Kubernetes集群提供命名服务,主要用来解析集群服务名和Pod的hostname。目的是让pod可以通过名字访问到集群内服务。它通过添加A记录的方式实现名字和service的解析。普通的service会解析到service-ip。headless service会解析到pod列表。

部署

通过kubernetes应用的方式部署kube-dns.yaml文件基本与官方一致(除了镜像名不同外)。 里面配置了多个组件,之间使用”---“分隔

代码语言:javascript
复制
#到kubernetes-starter目录执行命令
kubectl create -f target/services/kube-dns.yaml

在特定的命名空间中

kubectl -n kube-system get svc

只要安装了这个后,直接可以通过名称访问

说白了 只要运行dns服务,就可以直接用啦。

PS:基础集群的没有经过认证授权,也就基本完成了,这些组件就是每个k8s公司所必须的,非常重要非常核心,整个集群的搭建让老铁对k8s有个深入的了解,了解每个组件都是干啥用的,让老铁觉得k8s没有那么复杂,通过上边的安装,确实没有mesos和swarm那么简单,但是也没有那么复杂。一定要熟悉k8s的命令。下次了解下认证的授权。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程坑太多 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为集群增加service功能 - kube-proxy(工作节点102,103)
    • 简介
      • 部署
        • 9.3 重点配置说明
          • 操练service
          • 为集群增加dns功能 - kube-dns(app)
            • 简介
              • 部署
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档