一、预先准备环境

1. 准备服务器

这里准备了三台centos虚拟机,每台一核cpu和2G内存,配置好root账户,并安装好了docker,后续的所有操作都是使用root账户。虚拟机具体信息如下表:

系统类型 IP地址 节点角色 CPU Memory Hostname
centos7.2 10.0.94.182 worker 1 2G server01
centos7.2 10.0.94.112 master 1 2G server02
centos7.2 10.0.94.246 worker 1 2G server03

使用ubuntu的同学也可以参考此文档,需要注意替换系统命令即可

2. 安装docker(所有节点)

一般情况使用下面的方法安装即可

2.1 卸载旧版本(如果有的话)

yum remove docker docker-common docker-selinux docker-engine

2.2 更新yum源

yum install -y yum-utils device-mapper-persistent-data lvm2 //安装更新源工具
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo //添加docker安装源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo //国内镜像
yum-config-manager --disable docker-ce-edge //禁止edge版本
yum update -y 更新源

2.3 安装docker-ce

  • 安装最新的稳定版
sudo yum makecache fast
sudo yum install docker-ce
sudo systemctl enable docker //开机自启动
sudo systemctl start docker
  • 安装指定版本
#获取版本列表

yum list docker-ce.x86_64  --showduplicates |sort -r

#指定版本安装(比如版本是17.03.1~ce-0~centos)

sudo yum install docker-ce-17.03.1.ce-1.el7.centos
  • 接受所有ip的数据包转发
$ vi /lib/systemd/system/docker.service

#找到ExecStart=xxx,在这行上面加入一行,内容如下:(k8s的网络需要)

ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT
  • 配置Cgroup Driver(暂时不用配置)
#创建文件/etc/docker/daemon.json,添加如下内容:
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
  • 启动服务
systemctl daemon-reload && systemctl restart docker && systemctl status docker

遇到问题可以参考:官方教程

3. 系统设置(所有节点)

3.1 关闭、禁用防火墙(让所有机器之间都可以通过任意端口建立连接)

systemctl stop firewalld
systemctl disable firewalld #查看状态 systemctl status firewalld

3.2 禁用SELinux

setenforce 0

编辑文件/etc/selinux/config,将SELINUX修改为disabled,如下:

SELINUX=disabled

3.3 关闭系统Swap

Kubernetes 1.8开始要求关闭系统的Swap,如果不关闭,默认配置下kubelet将无法启动。方法一,通过kubelet的启动参数–fail-swap-on=false更改这个限制。方法二,关闭系统的Swap。

swapoff -a

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

3.4 设置系统参数 - 允许路由转发,不对bridge的数据进行处理

#写入配置文件

cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF #生效配置文件 $ sysctl -p /etc/sysctl.d/k8s.conf

3.3 配置host文件

#
配置host,使每个Node都可以通过名字解析到ip地址 $ vi /etc/hosts #
加入如下片段(ip地址和servername替换成自己的) 10.0.94.182 server01
10.0.94.112 server02
10.0.94.246 server03

4. 准备二进制文件(所有节点)

kubernetes的安装有几种方式,不管是kube-admin还是社区贡献的部署方案都离不开这几种方式:

  • 使用现成的二进制文件

直接从官方或其他第三方下载,就是kubernetes各个组件的可执行文件。拿来就可以直接运行了。不管是centos,ubuntu还是其他的linux发行版本,只要gcc编译环境没有太大的区别就可以直接运行的。使用较新的系统一般不会有什么跨平台的问题。

  • 使用源码编译安装

编译结果也是各个组件的二进制文件,所以如果能直接下载到需要的二进制文件基本没有什么编译的必要性了。

  • 使用镜像的方式运行

同样一个功能使用二进制文件提供的服务,也可以选择使用镜像的方式。就像nginx,像mysql,我们可以使用安装版,搞一个可执行文件运行起来,也可以使用它们的镜像运行起来,提供同样的服务。kubernetes也是一样的道理,二进制文件提供的服务镜像也一样可以提供。

从上面的三种方式中其实使用镜像是比较优雅的方案,容器的好处自然不用多说。但从初学者的角度来说容器的方案会显得有些复杂,不那么纯粹,会有很多容器的配置文件以及关于类似二进制文件提供的服务如何在容器中提供的问题,容易跑偏。 所以我们这里使用二进制的方式来部署。二进制文件已经这里备好,大家可以打包下载,把下载好的文件放到每个节点上,放在哪个目录随你喜欢,放好后最好设置一下环境变量$PATH,方便后面可以直接使用命令。(科学上网的同学也可以自己去官网找找)
####下载地址(kubernetes 1.9.0版本)

$ cd
$ wget https://d11.baidupcs.com/file/8978e11910fb914bf1ab64b07976387f?bkt=p3-00002e17df651425d9ebba9738a94260652d&xcode=1483c091614709ca1f8aebee62ed1736ae9fc2e7aef036b5347c2dfae32981f3d0b67a61d4982d47&fid=4043815353-250528-907147618066443&time=1523770067&sign=FDTAXGERLQBHSKa-DCb740ccc5511e5e8fedcff06b081203-5yQA%2FzOEVOgp6%2FV21cqTCe%2FY8HQ%3D&to=d11&size=196361624&sta_dx=196361624&sta_cs=174&sta_ft=gz&sta_ct=5&sta_mt=5&fm2=MH%2CYangquan%2CAnywhere%2C%2Cshanghai%2Cct&vuk=4247423043&iv=0&newver=1&newfm=1&secfm=1&flow_ver=3&pkey=00002e17df651425d9ebba9738a94260652d&sl=81068110&expires=8h&rt=sh&r=431850130&mlogid=2425063882106374965&vbdid=463040528&fin=kubernetes-bins.tar.gz&fn=kubernetes-bins.tar.gz&rtype=1&dp-logid=2425063882106374965&dp-callid=0.1.1&hps=1&tsl=10&csl=10&csign=zHM%2B%2FfQNfqc7suh8mmRWRLs6e4g%3D&so=0&ut=8&uter=4&serv=0&uc=185380727&ic=3389584746&ti=5e666840c78f1973ef8ab19e5a112b76ee0066a78adba1f7305a5e1275657320&by=themis
$ tar -xvf kubernetes-bins.tar.gz
$ rm kubernetes-bins.tar.gz
$ mv kubernetes-bins/ bin

5. 准备配置文件(所有节点)

上一步我们下载了kubernetes各个组件的二进制文件,这些可执行文件的运行也是需要添加很多参数的,包括有的还会依赖一些配置文件。现在我们就把运行它们需要的参数和配置文件都准备好。

5.1 下载配置文件

#到home目录下载项目
$ cd
$ git clone https://github.com/jimbunny/kubernetes-starter.git
# 看看git内容
$ cd ~/kubernetes-starter && ls

5.2 文件说明

  • gen-config.sh

shell脚本,用来根据每个同学自己的集群环境(ip,hostname等),根据下面的模板,生成适合大家各自环境的配置文件。生成的文件会放到target文件夹下。

  • kubernetes-simple

简易版kubernetes配置模板(剥离了认证授权)。 适合刚接触kubernetes的同学,首先会让大家在和kubernetes初次见面不会印象太差(太复杂啦~~),再有就是让大家更容易抓住kubernetes的核心部分,把注意力集中到核心组件及组件的联系,从整体上把握kubernetes的运行机制。

  • kubernetes-with-ca

在simple基础上增加认证授权部分。大家可以自行对比生成的配置文件,看看跟simple版的差异,更容易理解认证授权的(认证授权也是kubernetes学习曲线较高的重要原因)

  • service-config

这个先不用关注,它是我们曾经开发的那些微服务配置。 等我们熟悉了kubernetes后,实践用的,通过这些配置,把我们的微服务都运行到kubernetes集群中。

5.3 生成配置

这里会根据大家各自的环境生成kubernetes部署过程需要的配置文件。 在每个节点上都生成一遍,把所有配置都生成好,后面会根据节点类型去使用相关的配置。

#cd到之前下载的git代码目录

$ cd ~/kubernetes-starter

#编辑属性配置(根据文件注释中的说明填写好每个key-value)

$ vi config.properties

#生成配置文件,确保执行过程没有异常信息

$ ./gen-config.sh simple

#查看生成的配置文件,确保脚本执行成功

$ find target/ -type f
target/all-node/kube-calico.service
target/master-node/kube-controller-manager.service
target/master-node/kube-apiserver.service
target/master-node/etcd.service
target/master-node/kube-scheduler.service
target/worker-node/kube-proxy.kubeconfig
target/worker-node/kubelet.service
target/worker-node/10-calico.conf
target/worker-node/kubelet.kubeconfig
target/worker-node/kube-proxy.service
target/services/kube-dns.yaml

执行gen-config.sh常见问题:

  1. gen-config.sh: 3: gen-config.sh: Syntax error: "(" unexpected

  2. bash版本过低,运行:bash -version查看版本,如果小于4需要升级

  3. 不要使用 sh gen-config.sh的方式运行(sh和bash可能不一样哦)

    +
  4. config.properties文件填写错误,需要重新生成 再执行一次./gen-config.sh simple即可,不需要手动删除target

k8s1.9.0安装--环境准备的更多相关文章

  1. k8s1.9.0安装--完整集群部署

    三.完整集群部署 - kubernetes-with-ca 1. 理解认证授权 1.1 为什么要认证 想理解认证,我们得从认证解决什么问题.防止什么问题的发生入手.防止什么问题呢?是防止有人入侵你的集 ...

  2. k8s1.11.0安装、一个master、一个node、查看node名称是主机名、node是扩容进来的、带cadvisor监控服务

    一个master.一个node.查看node节点是主机名 # 安装顺序:先在test1 上安装完必要组件后,就开始在 test2 上单独安装node组件,实现node功能,再返回来配置test1加入集 ...

  3. k8s1.11.0安装、一个master、一个node、查看node名称是ip、node是扩容进来的、带cadvisor监控服务

    一个master.一个node.查看node节点是ip # 安装顺序:先在test1 上安装完必要组件后,就开始在 test2 上单独安装node组件,实现node功能,再返回来配置test1加入集群 ...

  4. k8s1.9.0安装--基础集群部署

    二.基础集群部署 - kubernetes-simple 1. 部署ETCD(主节点) 1.1 简介 kubernetes需要存储很多东西,像它本身的节点信息,组件信息,还有通过kubernetes运 ...

  5. [转]phoneGap3.0安装步骤(以windows下的android环境为例):

    phoneGap3.0安装步骤(以windows下的android环境为例): 环境: WIN系统,JDK,Android,Eclipse,Ant,Git,PhoneGap3.x (Cordova) ...

  6. Windows环境下Android Studio v1.0安装教程

    Windows环境下Android Studio v1.0安装教程 准备工具 JDK安装包. 要求:JDK 7以及以上版本. Android Studio安装文件. Windows: exe(包含SD ...

  7. inux环境PHP7.0安装

    inux环境PHP7.0安装   PHP7和HHVM比较PHP7的在真实场景的性能确实已经和HHVM相当, 在一些场景甚至超过了HHVM.HHVM的运维复杂, 是多线程模型, 这就代表着如果一个线程导 ...

  8. 【转】Windows环境下Android Studio v1.0安装教程

    原文网址:http://ask.android-studio.org/?/article/9 http://android-studio.org/index.php/docs/experience/1 ...

  9. WebStorm 8.0安装LESS编译环境的教程

    WebStorm是一个非常棒的Web前端开发编辑器,被程序猿们成为“最智能的JavaScript IDE”.对HTML5.Bootstrap框架.Node.js等都有完美支持.目前最新版本为WebSt ...

随机推荐

  1. 转载几篇文章URL

    读了百伯在线Jobbole的几篇文章,转给需要的朋友.如下: 产品小设计大体验:http://blog.jobbole.com/39593/ 苹果是一家有工程师的设计公司:Google是一家有设计师的 ...

  2. 浅谈jpa、hibernate与spring data jpa三者之间的关系

    1.解释hibernate之前先了解下什么是orm,orm是object relation mapping,即对象关系映射,object可以理解成java实体类Entity,relation是关系型数 ...

  3. C++程序设计1(侯捷video 7-13)

     一.Big three(拷贝构造.拷贝赋值.析构函数)(video7) Big three指三个特殊函数,分别是拷贝构造函数.拷贝赋值和析构函数. 什么时候需要拷贝构造.拷贝赋值.析构函数: 当类中 ...

  4. Hadoop 学习之路(四)—— Hadoop单机伪集群环境搭建

    一.前置条件 Hadoop的运行依赖JDK,需要预先安装,安装步骤见: Linux下JDK的安装 二.配置免密登录 Hadoop组件之间需要基于SSH进行通讯. 2.1 配置映射 配置ip地址和主机名 ...

  5. spring boot 2.x 系列 —— spring boot 整合 redis

    文章目录 一.说明 1.1 项目结构 1.2 项目主要依赖 二.整合 Redis 2.1 在application.yml 中配置redis数据源 2.2 封装redis基本操作 2.3 redisT ...

  6. Node中的cookie的使用

    1.为什么使用cookie? 因为HTTP是无状态协议.简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页面,服务器无法认识到,这是同一个浏览器在访问同一个网站.每一次的访问,都是没有任何关系 ...

  7. SQL 对float类型列进行排序引发的异常

    车祸现场 要求:根据学分和完成时间获取前200名学员,当学分相同时,完成时间较早的排在前面 可以明显看到,完成时间为4.1号的记录排在了3.27号前面. 事故原因 float 表示近似数值,存在精度损 ...

  8. SQL中的LIKE语句的用法

    SQL中的LIKE语句的用法 内容 在SQL结构化查询语言中,LIKE语句有着至关重要的作用.LIKE语句的语法格式是:select * from 表名 where 字段名 like 对应值(子串), ...

  9. 什么是JS跨域请求

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

  10. 机器学习读书笔记(七)支持向量机之线性SVM

    一.SVM SVM的英文全称是Support Vector Machines,我们叫它支持向量机.支持向量机是我们用于分类的一种算法. 1 示例: 先用一个例子,来了解一下SVM 桌子上放了两种颜色的 ...