参考:https://www.kubernetes.org.cn/4956.html

1.准备

说明:准备工作需要在集群所有的主机上执行


1.1系统配置

在安装之前,需要先做如下准备。三台CentOS主机如下:

  1. cat /etc/hosts
  2. 192.168.0.19 tf-01
  3. 192.168.0.20 tf-02
  4. 192.168.0.21 tf-03

如果各个主机启用了防火墙,需要开放Kubernetes各个组件所需要的端口,可以查看Installing kubeadm中的”Check required ports”一节。 这里简单起见在各节点禁用防火墙:

  1. systemctl stop firewalld
  2. systemctl disable firewalld

禁用SELINUX:

  1. setenforce 0
  2.  
  3. vi /etc/selinux/config
  4. SELINUX=disabled

创建/etc/sysctl.d/k8s.conf文件,添加如下内容:

  1. net.bridge.bridge-nf-call-ip6tables = 1
  2. net.bridge.bridge-nf-call-iptables = 1
  3. net.ipv4.ip_forward = 1

执行命令使修改生效。

  1. modprobe br_netfilter
  2. sysctl -p /etc/sysctl.d/k8s.conf

1.2kube-proxy开启ipvs的前置条件

由于ipvs已经加入到了内核的主干,所以为kube-proxy开启ipvs的前提需要加载以下的内核模块:

  1. ip_vs
  2. ip_vs_rr
  3. ip_vs_wrr
  4. ip_vs_sh
  5. nf_conntrack_ipv4
  6.  
  7. 在所有的Kubernetes节点上执行以下脚本:
  1. cat > /etc/sysconfig/modules/ipvs.modules <<EOF
  2. #!/bin/bash
  3. modprobe -- ip_vs
  4. modprobe -- ip_vs_rr
  5. modprobe -- ip_vs_wrr
  6. modprobe -- ip_vs_sh
  7. modprobe -- nf_conntrack_ipv4
  8. EOF
  9. chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

上面脚本创建了的/etc/sysconfig/modules/ipvs.modules文件,保证在节点重启后能自动加载所需模块。

使用lsmod | grep -e ip_vs -e nf_conntrack_ipv4命令查看是否已经正确加载所需的内核模块。

  1. lsmod | grep -e ip_vs -e nf_conntrack_ipv4

接下来还需要确保各个节点上已经安装了ipset软件包yum install ipset。 为了便于查看ipvs的代理规则,最好安装一下管理工具ipvsadm yum install ipvsadm。

  1. yum install ipset
  2.  
  3. ipvsadm yum install ipvsadm

如果以上前提条件如果不满足,则即使kube-proxy的配置开启了ipvs模式,也会退回到iptables模式

1.3安装Docker

Kubernetes从1.6开始使用CRI(Container Runtime Interface)容器运行时接口。默认的容器运行时仍然是Docker,使用的是kubelet中内置dockershim CRI实现。

安装docker的yum源:

  1. yum install -y yum-utils device-mapper-persistent-data lvm2
  2. yum-config-manager \
  3. --add-repo \
  4. https://download.docker.com/linux/centos/docker-ce.repo

查看最新的Docker版本:

  1. yum list docker-ce.x86_64 --showduplicates |sort -r
  2. docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable
  3. docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable
  4. docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable
  5. docker-ce.x86_64 18.03.1.ce-1.el7.centos docker-ce-stable
  6. docker-ce.x86_64 18.03.0.ce-1.el7.centos docker-ce-stable
  7. docker-ce.x86_64 17.12.1.ce-1.el7.centos docker-ce-stable
  8. docker-ce.x86_64 17.12.0.ce-1.el7.centos docker-ce-stable
  9. docker-ce.x86_64 17.09.1.ce-1.el7.centos docker-ce-stable
  10. docker-ce.x86_64 17.09.0.ce-1.el7.centos docker-ce-stable
  11. docker-ce.x86_64 17.06.2.ce-1.el7.centos docker-ce-stable
  12. docker-ce.x86_64 17.06.1.ce-1.el7.centos docker-ce-stable
  13. docker-ce.x86_64 17.06.0.ce-1.el7.centos docker-ce-stable
  14. docker-ce.x86_64 17.03.3.ce-1.el7 docker-ce-stable
  15. docker-ce.x86_64 17.03.2.ce-1.el7.centos docker-ce-stable
  16. docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable
  17. docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable

Kubernetes 1.12已经针对Docker的1.11.1, 1.12.1, 1.13.1, 17.03, 17.06, 17.09, 18.06等版本做了验证,需要注意Kubernetes 1.12最低支持的Docker版本是1.11.1。Kubernetes 1.13对Docker的版本依赖方面没有变化。 我们这里在各节点安装docker的18.06.1版本。

  1. yum makecache fast
  2.  
  3. yum install -y --setopt=obsoletes=0 \
  4. docker-ce-18.06.1.ce-3.el7
  5.  
  6. systemctl start docker
  7. systemctl enable docker

确认一下iptables filter表中FOWARD链的默认策略(pllicy)为ACCEPT。

  1. iptables -nvL
  2. Chain INPUT (policy ACCEPT 263 packets, 19209 bytes)
  3. pkts bytes target prot opt in out source destination
  4.  
  5. Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
  6. pkts bytes target prot opt in out source destination
  7. 0 0 DOCKER-USER all -- * * 0.0.0.0/0 0.0.0.0/0
  8. 0 0 DOCKER-ISOLATION-STAGE-1 all -- * * 0.0.0.0/0 0.0.0.0/0
  9. 0 0 ACCEPT all -- * docker0 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
  10. 0 0 DOCKER all -- * docker0 0.0.0.0/0 0.0.0.0/0
  11. 0 0 ACCEPT all -- docker0 !docker0 0.0.0.0/0 0.0.0.0/0
  12. 0 0 ACCEPT all -- docker0 docker0 0.0.0.0/0 0.0.0.0/0

Docker从1.13版本开始调整了默认的防火墙规则,禁用了iptables filter表中FOWARD链,这样会引起Kubernetes集群中跨Node的Pod无法通信。但这里通过安装docker 1806,发现默认策略又改回了ACCEPT,这个不知道是从哪个版本改回的,因为我们线上版本使用的1706还是需要手动调整这个策略的。

2.使用kubeadm部署Kubernetes


2.1 安装kubeadm和kubelet

下面在各节点安装kubeadm和kubelet:

  1. cat <<EOF > /etc/yum.repos.d/kubernetes.repo
  2. [kubernetes]
  3. name=Kubernetes
  4. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
  5. enabled=1
  6. gpgcheck=0
  7. repo_gpgcheck=0
  8. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
  9. https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  10. EOF

注意:此处与参考的原文不同,原文用了google的资源,因为google联不上,此处改为aliyun,且不开启check(check=0)

  1. yum makecache fast
  2. yum install -y kubelet kubeadm kubectl
  3.  
  4. ...
  5. Installed:
  6. kubeadm.x86_64 0:1.13.0-0 kubectl.x86_64 0:1.13.0-0 kubelet.x86_64 0:1.13.0-0
  7.  
  8. Dependency Installed:
  9. cri-tools.x86_64 0:1.12.0-0 kubernetes-cni.x86_64 0:0.6.0-0 socat.x86_64 0:1.7.3.2-2.el7

从安装结果可以看出还安装了cri-tools, kubernetes-cni, socat三个依赖:

  • 官方从Kubernetes 1.9开始就将cni依赖升级到了0.6.0版本,在当前1.12中仍然是这个版本
  • socat是kubelet的依赖
  • cri-tools是CRI(Container Runtime Interface)容器运行时接口的命令行工具

运行kubelet –help可以看到原来kubelet的绝大多数命令行flag参数都被DEPRECATED了,如:

  1. ......
  2. --address 0.0.0.0 The IP address for the Kubelet to serve on (set to 0.0.0.0 for all IPv4 interfaces and `::` for all IPv6 interfaces) (default 0.0.0.0) (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
  3. ......

而官方推荐我们使用–config指定配置文件,并在配置文件中指定原来这些flag所配置的内容。具体内容可以查看这里Set Kubelet parameters via a config file。这也是Kubernetes为了支持动态Kubelet配置(Dynamic Kubelet Configuration)才这么做的,参考Reconfigure a Node’s Kubelet in a Live Cluster

kubelet的配置文件必须是json或yaml格式,具体可查看这里

Kubernetes 1.8开始要求关闭系统的Swap,如果不关闭,默认配置下kubelet将无法启动。(如果不能关闭Swap,则需要修改kubelet的配置,下附)

关闭系统的Swap方法如下:

  1. swapoff -a 

修改 /etc/fstab 文件,注释掉 SWAP 的自动挂载,使用free -m确认swap已经关闭。

  1. vim /etc/fstab
  2.  
  3. free -m

swappiness参数调整,修改/etc/sysctl.d/k8s.conf添加下面一行:

  1. vm.swappiness=

执行sysctl -p /etc/sysctl.d/k8s.conf使修改生效。

  1. sysctl -p /etc/sysctl.d/k8s.conf

  

如果集群主机上还运行其他服务,关闭swap可能会对其他服务产生影响,则可以修改kubelet的配置去掉这个限制:

使用kubelet的启动参数–fail-swap-on=false去掉必须关闭Swap的限制。 修改/etc/sysconfig/kubelet,加入  KUBELET_EXTRA_ARGS=--fail-swap-on=false

  1. KUBELET_EXTRA_ARGS=--fail-swap-on=false

  

2.2 使用kubeadm init初始化集群

在各节点开机启动kubelet服务:

  

  

  

  

  

  

  

  

  

  

  

  

  

CentOS部署Kubernetes1.13集群-1(使用kubeadm安装K8S)的更多相关文章

  1. Ubuntu16.04安装kubernetes1.13集群

    Ubuntu16.04安装kubernetes1.13集群 最新的安装可以使用以下方式:https://www.cnrancher.com/docs/rancher/v2.x/cn/overview/ ...

  2. [转帖]Breeze部署kubernetes1.13.2高可用集群

    Breeze部署kubernetes1.13.2高可用集群 2019年07月23日 10:51:41 willblog 阅读数 673 标签: kubernetes 更多 个人分类: kubernet ...

  3. Centos7离线部署kubernetes 1.13集群记录

    一.说明 本篇主要参考kubernetes中文社区的一篇部署文章(CentOS 使用二进制部署 Kubernetes 1.13集群),并做了更详细的记录以备用. 二.部署环境 1.kubernetes ...

  4. kubernetes1.30集群部署+dashboard+heapster

    v2.1 1.系统配置 1.1.禁用防火墙.禁用selinux #防火墙禁用 systemctl stop firewalld systemctl disable firewalld #SELinux ...

  5. 001.Ansible部署RHCS存储集群

    一 前期准备 1.1 前置条件 至少有三个不同的主机运行monitor (MON)节点: 至少三个直接存储(非外部SAN硬件)的OSD节点主: 至少两个不同的manager (MGR)节点: 如果使用 ...

  6. 使用 Kubeadm+Containerd 部署一个 Kubernetes 集群

    本文独立博客阅读地址:https://ryan4yin.space/posts/kubernetes-deployemnt-using-kubeadm/ 本文由个人笔记 ryan4yin/knowle ...

  7. Docker 部署 RocketMQ Dledger 集群模式( 版本v4.7.0)

    文章转载自:http://www.mydlq.club/article/97/ 系统环境: 系统版本:CentOS 7.8 RocketMQ 版本:4.7.0 Docker 版本:19.03.13 一 ...

  8. kubernetes kubeadm部署高可用集群

    k8s kubeadm部署高可用集群 kubeadm是官方推出的部署工具,旨在降低kubernetes使用门槛与提高集群部署的便捷性. 同时越来越多的官方文档,围绕kubernetes容器化部署为环境 ...

  9. 使用Docker构建持续集成与自动部署的Docker集群

    为什么使用Docker " 从我个人使用的角度讲的话  部署来的更方便 只要构建过一次环境 推送到镜像仓库 迁移起来也是分分钟的事情 虚拟化让集群的管理和控制部署都更方便 hub.docke ...

随机推荐

  1. FastJson的忽略字段和格式日期用法

     1.指定序列化顺序 缺省fastjson序列化一个java bean,是根据fieldName的字母序进行序列化的,你可以通过ordinal指定字段的顺序.这个特性需要1.1.42以上版本. pub ...

  2. LeetCode SQL:Employees Earning More Than Their Managers

    # Write your MySQL query statement below SELECT a.Name FROM Employee AS a INNER JOIN Employee AS b O ...

  3. flex自适应宽度显示省略号

    text-overflow:ellipsis文本溢出显示省略号,一般的搭配用法如下: div{ text-overflow:ellipsis; overflow:hidden; white-space ...

  4. PHP通过api上传图片

    参考:接口实现图片上传 提交端: $url="localhost:805/rdyc/123.jpg"; $img=file_get_contents($url); $img_api ...

  5. display:inline-block居中方式

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  6. opencv3.2.0 分离颜色通道&多通道图像混合

    ##名称:分离颜色通道&多通道图像混合 ##平台:QT5.7.1+OpenCV3.2.0 ##时间:2017年12月11日 /***************创建QT控制台程序********* ...

  7. DDL为什么不能rollback?

    转自 http://blog.csdn.net/dba_waterbin/article/details/8621367 在Oracle中DDL语句将转化为对数据字典表的DML语句:比如,一个简单的修 ...

  8. MQTT介绍(3)java模拟MQTT的发布,订阅

    MQTT目录: MQTT简单介绍 window安装MQTT服务器和client java模拟MQTT的发布,订阅 在此强调一下mqtt的使用场景: 1.不可靠.网络带宽小的网络 2.运行的设备CPU. ...

  9. idea 版本控制忽略文件、文件夹设置

    setting 或者底部的 设置 忽略某个文件 后面选择框可以去选择 忽略某个文件夹 后面选择框可以去选择 忽略某种文件 后面输入填写如: *.txt

  10. Sql_从查询的结果集中分组后取最后有效的数据成新的结果集小记(待优化)

    Dim sql As String = " SELECT xp.*, " sql = sql + " xf_owner.ownername, " sql = s ...