Centos7 部署 Kubenetes 集群

本贴最后更新于 2158 天前,其中的信息可能已经时移世异

一 开篇
    上一篇文章我讲解了etcd 集群的部署,经过研读 docker 与 k8s 的官方网站,现在就开始做 Kubenetes 集群的搭建。
二 目标
    1)搭建 1 主 2 从的 k8s 集群
    2)k8s 集群利用外部的 etcd 集群作为数据存储与服务发现
    搭建集群,就要基于实际的业务情况判断集群规模以及可用性,1 主 2 从适用于小规模集群,主节点主要用于调度以及下发配置等,且数据中心依赖于外部 etcd 的集群,有一定的可用性,如果集群规模较大且容器容纳的微服务较多,请考虑多主多从的高可用方案
    3)k8s 集群使用 flannel 作为 pod network
    kubenetes 提供了 Calico、Canal、Cilium、Flannel、Kube-router、Romana、JuniperContrail/TungstenFabric 这些方案,Flannel 虽然不是这些方案中性能最优的,但它是适用场景最多的,各自的优缺点请大家自行 google,这里不做过多的介绍
    4)kube-proxy 使用 ipvs 模式
    为什么用 ipvs 模式,而不用 iptables,官方描述的不同点如下,本人在此不做翻译,不同之处没说太多,ipvs 的优点倒是通篇体现,有一种谁用谁知道的感觉再此,so...
    1. IPVS provides better scalability and performance for large clusters.
    2. IPVS supports more sophisticated load balancing algorithms than iptables (least load, least connections, locality, weighted, etc.).
    3. IPVS supports server health checking and connection retries, etc.
    kubenetes 基于 ipvs 的链接菌再此,有兴趣的请看点我
三 环境介绍
    三台云主机,系统环境均为 Centos7,3 点节点已部署好 etcd 集群,本文 etcd 集群跟 k8s 集群在相同的节点上,实际的生产环境中建议大家另行找 3 台 2 核 8g 内存的云主机部署 etcd 集群,名称及 IP 地址如下:
    app1:192.168.16.5
    app2:192.168.16.6
    app3:192.168.16.102
四 集群部署
    4.1 部署社区版 docker(全部节点执行)
        4.1.1 卸载历史版本

   $ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

        4.1.2 安装必须依赖包

   $ sudo yum install -y yum-utils \
     device-mapper-persistent-data \
     lvm2

        4.1.3 添加安装包的仓库

   $ sudo yum-config-manager \
      --add-repo \
      https://download.docker.com/linux/centos/docker-ce.repo

        4.1.4 查看可安装的版本
        yum list docker-ce --showduplicates | sort -r
        4.1.5 这里安装的是 docker-ce-18.03.0.ce 版本的 docker,如果不选择版本,默认安装最新版本的
        sudo yum install docker-ce-18.03.0.ce
        4.1.6 启动 docker 服务
        sudo systemctl start docker
    4.2 部署 k8s(全部节点执行)
        4.2.1 添加 k8s 的仓库

   cat <<EOF > /etc/yum.repos.d/kubernetes.repo
   [kubernetes]
   name=Kubernetes
   baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
   enabled=1
   gpgcheck=1
   repo_gpgcheck=1
   gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg  https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
   exclude=kube*
   EOF

        ※如若不能翻墙的话,请把 google 的镜像改为阿里云的,没标出的部分不修改

    baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

        4.2.2 关闭 selinux

   setenforce 0
   sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

        4.2.3 设置 iptables&生效

   cat <<EOF >  /etc/sysctl.d/k8s.conf
   net.bridge.bridge-nf-call-ip6tables = 1
   net.bridge.bridge-nf-call-iptables = 1
   EOF
   sysctl --system

        4.2.4 安装&启动服务
        yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
        systemctl enable kubelet && systemctl start kubelet
    4.3 加载 ipvs 模块
        4.3.1 确认是否开启

   cut -f1 -d " "  /proc/modules | grep -e ip_vs -e nf_conntrack_ipv4

        4.3.2 开启 ipvs 模块
        如果 4.3.1 的结果不包括以下几项:
            ip_vs
            ip_vs_rr
            ip_vs_wrr
            ip_vs_sh
            nf_conntrack_ipv4
        请执行以下操作后再执行 4.3.1 进行确认

     modprobe -- ip_vs
     modprobe -- ip_vs_rr
     modprobe -- ip_vs_wrr
     modprobe -- ip_vs_sh
     modprobe -- nf_conntrack_ipv4

        4.3.3 ipvs 模块无法开启的情况请确认内核是否满足 k8s 的最低版本需求。版本等需求点这里
    4.4 利用 kubeadm 配置集群
        4.4.1 设备 docker 的翻墙代理(全节点执行,配置集群的所需镜像需翻墙才能下载,如不能翻墙请自行把镜像下载的各自节点的仓库中去)

   mkdir -p /etc/systemd/system/docker.service.d
   cat <<EOF > /etc/systemd/system/docker.service.d/http-proxy.conf
   [Service]
   Environment="HTTP_PROXY=http://ip:port/"
   EOF

        4.4.2 书写初期化文件 init.yaml

   apiVersion: kubeadm.k8s.io/v1beta1
   kind: ClusterConfiguration
   kubernetesVersion: v1.13.1
   #使用外部etcd集群,如果不使用则在master节点启动一个etcd的pod作为数据中心
   etcd:
    external:
     endpoints:
     - http://192.168.16.5:2379
     - http://192.168.16.6:2379
     - http://192.168.16.102:2379
   #设置flannel网络
   networking:
    podSubnet: 10.244.0.0/16
   ---
   #设置kube-proxy的模式为ipvs,默认iptables
   apiVersion: kubeproxy.config.k8s.io/v1alpha1
   kind: KubeProxyConfiguration
   mode: ipvs

        4.4.3 创建 master,本文以 app1 作为 master,当前系统用户为非 root 用户
        sudo kubeadm init --config init.yaml
        4.4.4 设置当前用户可以使用集群

   mkdir -p $HOME/.kube
   sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
   sudo chown $(id -u):$(id -g) $HOME/.kube/config

        4.4.5 启用 flannel 网络

   kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml

        4.4.6 加入 worker 节点
        app2 跟 app3 节点分别执行,token,ip,port,hash 等信息从 mater 初期化好的日志中寻找,如果找不到请参照这里
        kubeadm join --token : --discovery-token-ca-cert-hash sha256:
五 集群确认
    5.1 确认节点信息
    kubectl get nodes

 NAME   STATUS   ROLES    AGE     VERSION
 app1   Ready    master   4h49m   v1.13.1
 app2   Ready    <none>   4h43m   v1.13.1
 app3   Ready    <none>   4h43m   v1.13.1

    5.2 确认 flannel 网络
    kubectl get pods -n kube-system

 NAME                           READY   STATUS    RESTARTS   AGE
 coredns-86c58d9df4-b475b       1/1     Running   0          4h50m
 coredns-86c58d9df4-kxlwk       1/1     Running   0          4h50m
 kube-apiserver-app1            1/1     Running   0          4h50m
 kube-controller-manager-app1   1/1     Running   0          4h49m
 kube-flannel-ds-amd64-6hw7r    1/1     Running   0          4h45m
 kube-flannel-ds-amd64-mqczn    1/1     Running   0          4h44m
 kube-flannel-ds-amd64-zsp9n    1/1     Running   0          4h50m
 kube-proxy-8krlq               1/1     Running   0          4h50m
 kube-proxy-cnwfx               1/1     Running   0          4h44m
 kube-proxy-vdfw9               1/1     Running   0          4h45m
 kube-scheduler-app1            1/1     Running   0          4h50m

    5.3 确认 kube-proxy 为 ipvs 模式(日志包含 server_others.go:189] Using ipvs Proxier.的字样即可)
    kubectl logs kube-proxy-8krlq -n kube-system

 I0108 12:27:37.199116       1 server_others.go:189] Using ipvs Proxier.
 W0108 12:27:37.199434       1 proxier.go:365] IPVS scheduler not specified, use rr by  default
 I0108 12:27:37.199576       1 server_others.go:216] Tearing down inactive rules.
 I0108 12:27:37.245958       1 server.go:464] Version: v1.13.1
 I0108 12:27:37.255926       1 conntrack.go:52] Setting nf_conntrack_max to 262144
 I0108 12:27:37.256226       1 config.go:202] Starting service config controller
 I0108 12:27:37.256277       1 controller_utils.go:1027] Waiting for caches to sync for service config controller
 I0108 12:27:37.256347       1 config.go:102] Starting endpoints config controller
 I0108 12:27:37.256373       1 controller_utils.go:1027] Waiting for caches to sync for endpoints config controller
 I0108 12:27:37.356479       1 controller_utils.go:1034] Caches are synced for service config controller
 I0108 12:27:37.356502       1 controller_utils.go:1034] Caches are synced for endpoints config controller

六 参考文档
    6.1 docker 官方文档
    6.2 k8s 官方文档

  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    110 引用 • 54 回帖 • 1 关注
  • 集群
    29 引用 • 65 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 2 关注
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 104 关注
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 354 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    93 引用 • 113 回帖
  • 博客

    记录并分享人生的经历。

    273 引用 • 2388 回帖
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 584 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 5 关注
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    53 引用 • 37 回帖 • 3 关注
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 4 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖
  • danl
    146 关注
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 335 关注
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    91 引用 • 384 回帖 • 2 关注
  • uTools

    uTools 是一个极简、插件化、跨平台的现代桌面软件。通过自由选配丰富的插件,打造你得心应手的工具集合。

    6 引用 • 14 回帖
  • Chrome

    Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

    62 引用 • 289 回帖
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1435 引用 • 10056 回帖 • 489 关注
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    200 引用 • 120 回帖
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖
  • 域名

    域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

    43 引用 • 208 回帖
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖 • 2 关注
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4601 回帖 • 700 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 232 回帖
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖 • 2 关注
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖 • 2 关注
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 75 关注
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 637 关注
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    89 引用 • 345 回帖