一、Kubernetes对应Docker的版本支持列表

Kubernetes 1.9  <--Docker 1.11.2 to 1.13.1 and 17.03.x
Kubernetes 1.8 <--Docker 1.11.2 to 1.13.1 and 17.03.x
Kubernetes 1.7 <--Docker 1.10.3, 1.11.2, 1.12.6
Kubernetes 1.6 <--Docker 1.10.3, 1.11.2, 1.12.6
Kubernetes 1.5 <--Docker 1.10.3, 1.11.2, 1.12.3

版本对应地址:

https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.5.md#external-dependency-version-information
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.6.md#external-dependency-version-information
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.7.md#external-dependency-version-information
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.8.md#external-dependencies
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.9.md#external-dependencies

二、Kubernetes集群部署架构图

三、Kubernetes集群环境规划

1、系统环境

[root@k8s-master ~]# cat /etc/redhat-release
CentOS Linux release 7.2. (Core)
[root@k8s-master ~]# uname -r
3.10.-.el7.x86_64
[root@k8s-master ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
[root@k8s-master ~]# getenforce
Disabled

2、服务器规划

节点及功能

主机名

IP

Master、etcd、registry

K8s-master

10.0.0.211

Node1

K8s-node-1

10.0.0.212

Node2

K8s-node-2

10.0.0.213

3、统一hosts解析

echo '
10.0.0.211 k8s-master
10.0.0.211 etcd
10.0.0.211 registry
10.0.0.212 k8s-node-
10.0.0.213 k8s-node-' >> /etc/hosts

4、下载Kubernetes(简称K8S)二进制文件

https://github.com/kubernetes/kubernetes/releases  

此处用的k8s版本为v:1.8.3

https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.8.md#v183

Docker版本为v17.03-ce

etcd下载版本为v3.1.18

https://github.com/coreos/etcd/releases/

四、Kubernetes集群离线部署

1、部署docker

#上传docker离线包#
yum install docker-ce-selinux-17.03..ce-.el7.centos.noarch.rpm docker-ce-17.03..ce-.el7.centos.x86_64.rpm -y
#移除旧版本#
yum remove docker \
docker-common \
docker-selinux \
docker-engine

设置docker服务开机启动

systemctl enable docker.service
systemctl start docker.service

修改docker的镜像源为国内的daocloud

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://a58c8480.m.daocloud.io

2、部署etcd3

CentOS7二进制安装组件注意事项:

①复制对应的二进制文件到/usr/bin目录下

②创建systemd service启动服务文件

③创建service 中对应的配置参数文件

④将该应用加入到开机自启

#上传etcd-v3.1.18-linux-amd64.tar.gz#
tar xf etcd-v3.1.18-linux-amd64.tar.gz
cd etcd-v3.1.18-linux-amd64/
mv etcd etcdctl /usr/bin/

①创建/etc/etcd/etcd.conf配置文件

mkdir /etc/etcd/ -p
mkdir /var/lib/etcd -p [root@k8s-master ~]# cat /etc/etcd/etcd.conf
ETCD_NAME=ETCD Server
ETCD_DATA_DIR="/var/lib/etcd/"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.211:2379"

②创建etcd.service启动服务文件

[root@k8s-master ~]# cat /etc/systemd/system/etcd.service
[Unit]
Description=etcd.service
[Service]
Type=notify
TimeoutStartSec=
Restart=always
WorkingDirectory=/var/lib/etcd
EnvironmentFile=-/etc/etcd/etcd.conf
ExecStart=/usr/bin/etcd
[Install]
WantedBy=multi-user.target
说明:其中WorkingDirectory为etcd数据库目录,前面我们已经提前创建好了

③设置etcd开机启动

systemctl daemon-reload
systemctl enable etcd.service
systemctl start etcd.service

④检验etcd是否安装成功

[root@k8s-master ~]# etcdctl cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://10.0.0.211:2379
cluster is healthy

3、部署k8s-Master节点组件

#上传kubernetes-server-linux-amd64.tar.gz#
tar xf kubernetes-server-linux-amd64.tar.gz
mkdir -p /app/kubernetes/{bin,cfg}
mv kubernetes/server/bin/{kube-apiserver,kube-scheduler,kube-controller-manager,kubectl} /app/kubernetes/bin

①配置kube-apiserver.service服务

配置文件:vim /app/kubernetes/cfg/kube-apiserver

# 启用日志标准错误
KUBE_LOGTOSTDERR="--logtostderr=true"
# 日志级别
KUBE_LOG_LEVEL="--v=4"
# Etcd服务地址
KUBE_ETCD_SERVERS="--etcd-servers=http://10.0.0.211:2379"
# API服务监听地址
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
# API服务监听端口
KUBE_API_PORT="--insecure-port=8080"
# 对集群中成员提供API服务地址
KUBE_ADVERTISE_ADDR="--advertise-address=10.0.0.211"
# 允许容器请求特权模式,默认false
KUBE_ALLOW_PRIV="--allow-privileged=false"
# 集群分配的IP范围
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.10.10.0/24"

启动服务systemd:vim /lib/systemd/system/kube-apiserver.service

[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes
[Service]
EnvironmentFile=-/app/kubernetes/cfg/kube-apiserver
#ExecStart=/app/kubernetes/bin/kube-apiserver ${KUBE_APISERVER_OPTS}
ExecStart=/app/kubernetes/bin/kube-apiserver \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${KUBE_ETCD_SERVERS} \
${KUBE_API_ADDRESS} \
${KUBE_API_PORT} \
${KUBE_ADVERTISE_ADDR} \
${KUBE_ALLOW_PRIV} \
${KUBE_SERVICE_ADDRESSES}
Restart=on-failure
[Install]
WantedBy=multi-user.target

启动服务,并设置开机自启

systemctl daemon-reload
systemctl enable kube-apiserver.service
systemctl start kube-apiserver.service

②配置kube-scheduler服务

配置文件:

vim /app/kubernetes/cfg/kube-scheduler
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=4"
KUBE_MASTER="--master=10.0.0.211:8080"

KUBE_LEADER_ELECT="--leader-elect"

systemd服务文件:

vim /lib/systemd/system/kube-scheduler.service
[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/kubernetes/kubernetes
[Service]
EnvironmentFile=-/app/kubernetes/cfg/kube-scheduler
ExecStart=/app/kubernetes/bin/kube-scheduler \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${KUBE_MASTER} \
${KUBE_LEADER_ELECT}
Restart=on-failure
[Install]
WantedBy=multi-user.target

启动服务并设置开机启动

systemctl daemon-reload
systemctl enable kube-scheduler.service
systemctl start kube-scheduler.service

③配置kube-controller-manger

配置文件:

cat /app/kubernetes/cfg/kube-controller-manager
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=4"
KUBE_MASTER="--master=10.0.0.211:8080"

systemd服务文件

cat /lib/systemd/system/kube-controller-manager.service
[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/kubernetes/kubernetes
[Service]
EnvironmentFile=-/app/kubernetes/cfg/kube-controller-manager
ExecStart=/app/kubernetes/bin/kube-controller-manager \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${KUBE_MASTER} \
${KUBE_LEADER_ELECT}
Restart=on-failure
[Install]
WantedBy=multi-user.target

启动服务并设置开机自启

systemctl daemon-reload
systemctl enable kube-controller-manager.service
systemctl start kube-controller-manager.service

至此Master节点组件就全部启动了,需要注意的是服务启动顺序有依赖,先启动etcd,再启动apiserver,其他组件无顺序要求

查看Master节点组件运行进程

[root@k8s-master ~]# ps -ef|grep kube
root : ? :: /app/kubernetes/bin/kube-apiserver --logtostderr=true --v= --etcd-servers=http://10.0.0.211:2379 --insecure-bind-address=0.0.0.0 --insecure-port=8080 --advertise-address=10.0.0.211 --allow-privileged=false --service-cluster-ip-range=10.10.10.0/24
root : ? :: /app/kubernetes/bin/kube-scheduler --logtostderr=true --v= --master=10.0.0.211: --leader-elect
root : ? :: /app/kubernetes/bin/kube-controller-manager --logtostderr=true --v= --master=10.0.0.211:
root : pts/ :: grep --color=auto kube

验证Master节点功能

[root@k8s-master ~]# kubectl get componentstatuses
NAME STATUS MESSAGE ERROR
etcd- Healthy {"health": "true"}
controller-manager Healthy ok
scheduler Healthy ok

如果启动失败,查看日志

[root@k8s-master ~]# journalctl -u kube-apiserver.service
-- Logs begin at 一 -- :: CST, end at 一 -- :: CST. --
9月 :: k8s-master systemd[]: Started Kubernetes API Server.
9月 :: k8s-master systemd[]: Starting Kubernetes API Server...
9月 :: k8s-master kube-apiserver[]: I0903 ::00.924400 flags.go:] FLAG: --addre
9月 :: k8s-master kube-apiserver[]: I0903 ::00.924847 flags.go:] FLAG: --admis
9月 :: k8s-master kube-apiserver[]: I0903 ::00.924866 flags.go:] FLAG: --admis
9月 :: k8s-master kube-apiserver[]: I0903 ::00.924873 flags.go:] FLAG: --adver
9月 :: k8s-master kube-apiserver[]: I0903 ::00.924878 flags.go:] FLAG: --allow
9月 :: k8s-master kube-apiserver[]: I0903 ::00.924884 flags.go:] FLAG: --alsol
9月 :: k8s-master kube-apiserver[]: I0903 ::00.924904 flags.go:] FLAG: --anony
9月 :: k8s-master kube-apiserver[]: I0903 ::00.924908 flags.go:] FLAG: --apise
9月 :: k8s-master kube-apiserver[]: I0903 ::00.924914 flags.go:] FLAG: --audit

配置环境变量

echo "export PATH=$PATH:/app/kubernetes/bin" >> /etc/profile
source /etc/profile

4、部署K8s-Node节点组件

#上传kubernetes-node-linux-amd64.tar.gz#
tar xf kubernetes-node-linux-amd64.tar.gz
mkdir -p /app/kubernetes/{bin,cfg}
mv kubernetes/node/bin/{kubelet,kube-proxy} /app/kubernetes/bin/

①配置kubelet服务

创建kubeconfig配置文件:kubeconfig文件用于kubelet连接master apiserver

cat /app/kubernetes/cfg/kubelet.kubeconfig
apiVersion: v1
kind: Config
clusters:
- cluster:
server: http://10.0.0.211:8080
name: local
contexts:
- context:
cluster: local
name: local
current-context: local

创建kubelet配置文件

cat /app/kubernetes/cfg/kubelet
# 启用日志标准错误
KUBE_LOGTOSTDERR="--logtostderr=true"
# 日志级别
KUBE_LOG_LEVEL="--v=4"
# Kubelet服务IP地址
NODE_ADDRESS="--address=10.0.0.212"
# Kubelet服务端口
NODE_PORT="--port=10250"
# 自定义节点名称
NODE_HOSTNAME="--hostname-override=10.0.0.212"
# kubeconfig路径,指定连接API服务器
KUBELET_KUBECONFIG="--kubeconfig=/app/kubernetes/cfg/kubelet.kubeconfig"
# 允许容器请求特权模式,默认false
KUBE_ALLOW_PRIV="--allow-privileged=false"
# DNS信息
KUBELET_DNS_IP="--cluster-dns=10.10.10.2"
KUBELET_DNS_DOMAIN="--cluster-domain=cluster.local"
# 禁用使用Swap
KUBELET_SWAP="--fail-swap-on=false"

systemd服务文件

cat /lib/systemd/system/kubelet.service
[Unit]
Description=Kubernetes Kubelet
After=docker.service
Requires=docker.service
[Service]
EnvironmentFile=-/app/kubernetes/cfg/kubelet
ExecStart=/app/kubernetes/bin/kubelet \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${NODE_ADDRESS} \
${NODE_PORT} \
${NODE_HOSTNAME} \
${KUBELET_KUBECONFIG} \
${KUBE_ALLOW_PRIV} \
${KUBELET_DNS_IP} \
${KUBELET_DNS_DOMAIN} \
${KUBELET_SWAP}
Restart=on-failure
KillMode=process
[Install]
WantedBy=multi-user.target

启动服务并设置开机自启

systemctl daemon-reload
systemctl enable kubelet.service
systemctl start kubelet.service

②配置kube-proxy服务

配置文件

mkdir /app/kubernetes/cfg/ -p

cat /app/kubernetes/cfg/kube-proxy
# 启用日志标准错误
KUBE_LOGTOSTDERR="--logtostderr=true"
# 日志级别
KUBE_LOG_LEVEL="--v=4"
# 自定义节点名称
NODE_HOSTNAME="--hostname-override=10.0.0.212"
# API服务地址
KUBE_MASTER="--master=http://10.0.0.211:8080"

systemd服务文件

cat /lib/systemd/system/kube-proxy.service
[Unit]
Description=Kubernetes Proxy
After=network.target
[Service]
EnvironmentFile=-/app/kubernetes/cfg/kube-proxy
ExecStart
=/app/kubernetes/bin/kube-proxy \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${NODE_HOSTNAME} \
${KUBE_MASTER}
Restart=on-failure
[Install]
WantedBy=multi-user.target

启动服务并设置开机自启

systemctl daemon-reload
systemctl enable kube-proxy
systemctl restart kube-proxy

③部署Flannel网络 

下载安装

wget https://github.com/coreos/flannel/releases/download/v0.9.1/flannel-v0.9.1-linux-amd64.tar.gz
tar xf flannel-v0.9.1-linux-amd64.tar.gz
cp flanneld mk-docker-opts.sh /usr/bin/
mkdir -p /app/flannel/conf/

配置内核转发

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

systemd服务文件

cat /usr/lib/systemd/system/flanneld.service

[Unit]
Description=Flanneld overlay address etcd agent
After=network.target
After=network-online.target
Wants=network-online.target
After=etcd.service
Before=docker.service [Service]
Type=notify
EnvironmentFile=/app/flannel/conf/flanneld
EnvironmentFile=-/etc/sysconfig/docker-network
ExecStart=/usr/bin/flanneld-start $FLANNEL_OPTIONS
ExecStartPost=/usr/libexec/flannel/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/docker
Restart=on-failure [Install]
WantedBy=multi-user.target
WantedBy=docker.service

配置文件:master、node都需要执行

cat /app/flannel/conf/flanneld

# Flanneld configuration options
# etcd url location. Point this to the server where etcd runs
FLANNEL_ETCD_ENDPOINTS="http://10.0.0.211:2379"
# etcd config key. This is the configuration key that flannel queries
# For address range assignment
FLANNEL_ETCD_KEY="/k8s/network"

# Any additional options that you want to pass
#FLANNEL_OPTIONS=""
FLANNEL_OPTIONS="--logtostderr=false --log_dir=/var/log/k8s/flannel/ --etcd-endpoints=http://10.0.0.211:2379"

启动服务并设置开机自启

Master执行:

etcdctl set /k8s/network/config '{ "Network": "172.16.0.0/16" }'
systemctl daemon-reload
systemctl enable flanneld.service
systemctl start flanneld.service

验证服务:

journalctl  -u flanneld |grep 'Lease acquired'
9月 :: k8s-node- flanneld[]: I0903 ::02.862074 manager.go:] Lease acquired: 10.0.11.0/
9月 :: k8s-node- flanneld[]: I0903 ::47.882891 manager.go:] Lease acquire: 10.0.11.0/

④启动Flannel之后,需要依次重启docker、kubernete

Master节点执行:

systemctl restart docker.service
systemctl restart kube-apiserver.service
systemctl restart kube-controller-manager.service
systemctl restart kube-scheduler.service

Node节点执行:

systemctl restart docker.service
systemctl restart kubelet.service
systemctl restart kube-proxy.service

Master节点查看IP信息

Node节点查看IP信息

小结:查看docker0和flannel0的网络设备,确保每个Node上的Docker0和flannel0在同一段内,并且不同节点的网段都被划分在172.16.0.0/16 的不同段内。如Master是172.16.88.0/16,Node1是172.16.65.0/16……

linux运维、架构之路-Kubernetes离线、二进制部署集群的更多相关文章

  1. [转贴]CentOS7.5 Kubernetes V1.13(最新版)二进制部署集群

    CentOS7.5 Kubernetes V1.13(最新版)二进制部署集群 http://blog.51cto.com/10880347/2326146   一.概述 kubernetes 1.13 ...

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

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

  3. linux运维、架构之路-Kubernetes离线集群部署-无坑

    一.部署环境介绍 1.服务器规划 系统 IP地址 主机名 CPU 内存 CentOS  7.5 192.168.56.11 k8s-node1 2C 2G CentOS  7.5 192.168.56 ...

  4. Kubernetes v1.12/v1.13 二进制部署集群(HTTPS+RBAC)

    官方提供的几种Kubernetes部署方式 minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用.不能用于生产环 ...

  5. Kubernetes V1.15 二进制部署集群

    1. 架构篇 1.1 kubernetes 架构说明              1.2 Flannel网络架构图 1.3 Kubernetes工作流程             2. 组件介绍 2.1 ...

  6. 转:linux运维工程师

    运维中关键技术点解剖:1 大量高并发网站的设计方案:2 高可靠.高可伸缩性网络架构设计:3 网站安全问题,如何避免被黑?4 南北互联问题,动态CDN解决方案:5 海量数据存储架构 一.什么是大型网站运 ...

  7. 面试 Linux 运维工作至少需要知道哪些知识?

    前言 我们已经发过不少 Linux 面试题,但是单独的面试题总感觉会过于零碎,没有体系化内容给人的帮助大. 知乎上有这样一个问题:一个新手面试 Linux 运维工作至少需要知道哪些知识?其中有一个答案 ...

  8. linux运维文章

    运维中关键技术点解剖:1 大量高并发网站的设计方案 :2 高可靠.高可伸缩性网络架构设计:3 网站安全问题,如何避免被黑?4 南北互联问题,动态CDN解决方案:5 海量数据存储架构 一.什么是大型网站 ...

  9. linux运维面试前,先来检查这些基础知识忘了没?

    知乎上有这样一个问题:一个新手面试 Linux 运维工作至少需要知道哪些知识?其中有一个答案对这一话题的解读非常深入,今天特别分享给大家. 一.什么是大型网站运维? 首先明确一下,全文所讲的”运维“是 ...

随机推荐

  1. c++读取utf-8格式中英文混合string

    最近项目中用到需要给出每一个字在string中的索引,但是又因为中文字符跟英文字符长度不一样,得分开处理, 在这里记录一下. 想要达到的效果如下: 将 “测试3.1415engEng”分割开 代码: ...

  2. 【java】的传值方式

    [java]的传值方式 当你问大多数程序员Java是传值还是传引用的时候,你可能会得到两种答案之一: (1)Java传递原始类型数据时使用的是传值方式:传递对象时则使用传引用方式:String类型的数 ...

  3. Scala类和对象

    1.面向对象 Scala的类与java.C++的一些比起来更简洁,速度更快 对象:使用object关键字修饰的 类:使用class关键字修饰的new Person()实例对象 new类:类的实例(对象 ...

  4. Android专项测试监控资源

    版本号 V 1.1.0 Android性能测试分为两类:1.一类为rom版本(系统)的性能测试2.一类为应用app的性能测试(本次主要关注点为app的性能测试) Android的app性能测试包括的测 ...

  5. 【BASIS系列】SAP Basis系统管理中重置用户缓冲哪些需要注意

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[BASIS系列]SAP Basis系统管理中重 ...

  6. 【MM系列】SAP 的账期分析和操作

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP 的账期分析和操作   前言部 ...

  7. 【MM系列】SAP MM模块-打开前面物料账期的方法

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]在SAP里查看数据的方法   前言部 ...

  8. 多线程17-Async Programming Model

        );             ThreadId = Thread.CurrentThread.ManagedThreadId;             ;             RunOnT ...

  9. spring boot 整合activemq

    1 Spring Boot与ActiveMQ整合 1.1使用内嵌服务 (1)在pom.xml中引入ActiveMQ起步依赖 <properties> <spring.version& ...

  10. 用nopcomerce3.8版本的同行注意了,前2天发布3.8正式版后,作者收到一些BuG,作者修复后重新提供了一个源代码包下载.

    用nopcomerce3.8版本的同行注意了,前2天发布3.8正式版后,作者收到一些BuG,作者修复后重新提供了一个源代码包下载地址,不是github上的那个链接.去作者官网论坛我那个链接地址,或关注 ...