今天这篇文章教给大家如何快速部署一套Kubernetes集群。K8S集群部署有几种方式:kubeadm、minikube和二进制包。前两者属于自动部署,简化部署操作,我们这里强烈推荐初学者使用二进制包部署,因为自动部署屏蔽了很多细节,使得对各个模块感知很少,非常不利用学习。

所以,这篇文章也是使用二进制包部署Kubernetes集群。

本章目录

一、架构拓扑图

二、环境规划

角色

IP

组件

master

192.168.0.211

etcd

kube-apiserver

kube-controller-manager

kube-scheduler

node01

192.168.0.212

kubelet

kube-proxy

docker

node02

192.168.0.213

kubelet

kube-proxy

docker

环境说明:

操作系统:Ubuntu16.04 or CentOS7

Kubernetes版本:v1.8.3

Docker版本:v17.09-ce

均采用当前最新稳定版本。

关闭selinux。

三、部署集群

3.1 下载二进制包

打开下面网址,下载下面两个红色框框的包。

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

下载完成后,上传到服务器:

kubernetes-server-linux-amd64.tar.gz上传到master节点。

kubernetes-node-linux-amd64.tar.gz 上传到node节点。

3.2  安装etcd3

  1. k8s-master# yum install etcd –y
  2. k8s-master# vi /etc/etcd/etcd.conf 
  3. ETCD_NAME="default"
  4. ETCD_DATA_DIR="/var/lib/etcd/default"
  5. ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
  6. ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379
  7. k8s-master# systemctl enable etcd
  8. k8s-master# systemctl start etcd

注意:Ubuntu系统etcd配置文件在/etc/default/etcd。

3.3 运行Master节点组件

  1. k8s-master# tar zxvf kubernetes-server-linux-amd64.tar.gz
  2. k8s-master# mkdir -p /opt/kubernetes/{bin,cfg}
  3. k8s-master# mv kubernetes/server/bin/{kube-apiserver,kube-scheduler,kube-controller-manager,kubectl} /opt/kubernetes/bin

3.3.1 apiserver

创建配置文件:

  1. # vi /opt/kubernetes/cfg/kube-apiserver
  2. # 启用日志标准错误
  3. KUBE_LOGTOSTDERR="--logtostderr=true"
  4. # 日志级别
  5. KUBE_LOG_LEVEL="--v=4"
  6. # Etcd服务地址
  7. KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.0.211:2379"
  8. # API服务监听地址
  9. KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
  10. # API服务监听端口
  11. KUBE_API_PORT="--insecure-port=8080"
  12. # 对集群中成员提供API服务地址
  13. KUBE_ADVERTISE_ADDR="--advertise-address=192.168.0.211"
  14. # 允许容器请求特权模式,默认false
  15. KUBE_ALLOW_PRIV="--allow-privileged=false"
  16. # 集群分配的IP范围
  17. KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.10.10.0/24"

创建systemd服务文件:

  1. # vi /lib/systemd/system/kube-apiserver.service 
  2. [Unit]
  3. Description=Kubernetes API Server
  4. Documentation=https://github.com/kubernetes/kubernetes
  5. [Service]
  6. EnvironmentFile=-/opt/kubernetes/cfg/kube-apiserver
  7. #ExecStart=/opt/kubernetes/bin/kube-apiserver ${KUBE_APISERVER_OPTS}
  8. ExecStart=/opt/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}
  9. Restart=on-failure
  10. [Install]
  11. WantedBy=multi-user.target

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

  1. # systemctl daemon-reload
  2. # systemctl enable kube-apiserver
  3. # systemctl restart kube-apiserver

注意:apiserver默认支持etcd3,如果是etcd2,需启动时指定版本选项--storage-backend=etcd2

3.3.2 scheduler

创建配置文件:

  1. # vi /opt/kubernetes/cfg/kube-scheduler
  2. KUBE_LOGTOSTDERR="--logtostderr=true"
  3. KUBE_LOG_LEVEL="--v=4"
  4. KUBE_MASTER="--master=192.168.0.211:8080"
  5. KUBE_LEADER_ELECT="--leader-elect"

创建systemd服务文件:

  1. # vi /lib/systemd/system/kube-scheduler.service
  2. [Unit]
  3. Description=Kubernetes Scheduler
  4. Documentation=https://github.com/kubernetes/kubernetes
  5. [Service]
  6. EnvironmentFile=-/opt/kubernetes/cfg/kube-scheduler
  7. ExecStart=/opt/kubernetes/bin/kube-scheduler ${KUBE_LOGTOSTDERR} ${KUBE_LOG_LEVEL} ${KUBE_MASTER} ${KUBE_LEADER_ELECT}
  8. Restart=on-failure
  9. [Install]
  10. WantedBy=multi-user.target

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

  1. # systemctl daemon-reload
  2. # systemctl enable kube-scheduler
  3. # systemctl restart kube-scheduler

3.3.3 controller-manager

创建配置文件:

  1. # vi /opt/kubernetes/cfg/kube-controller-manager
  2. KUBE_LOGTOSTDERR="--logtostderr=true"
  3. KUBE_LOG_LEVEL="--v=4"
  4. KUBE_MASTER="--master=192.168.0.211:8080"

创建systemd服务文件:

  1. # vi /lib/systemd/system/kube-controller-manager.service
  2. [Unit]
  3. Description=Kubernetes Controller Manager
  4. Documentation=https://github.com/kubernetes/kubernetes
  5. [Service]
  6. EnvironmentFile=-/opt/kubernetes/cfg/kube-controller-manager
  7. ExecStart=/opt/kubernetes/bin/kube-controller-manager ${KUBE_LOGTOSTDERR} ${KUBE_LOG_LEVEL} ${KUBE_MASTER} ${KUBE_LEADER_ELECT}
  8. Restart=on-failure
  9. [Install]
  10. WantedBy=multi-user.target

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

  1. # systemctl daemon-reload
  2. # systemctl enable kube-controller-manager
  3. # systemctl restart kube-controller-manager

3.3.4 小结

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

查看Master节点组件进程状态:

说明组件都在运行。

如果启动失败,请查看启动日志,例如:

#journalctl -u kube-apiserver

3.4  运行Node节点组件

  1. k8s-node01# tar zxvf kubernetes-node-linux-amd64.tar.gz
  2. k8s-node01# mkdir -p /opt/kubernetes/{bin,cfg}
  3. k8s-node01# mv kubernetes/node/bin/{kubelet,kube-proxy} /opt/kubernetes/bin/

3.4.1 kubelet

创建kubeconfig配置文件:

  1. # vi /opt/kubernetes/cfg/kubelet.kubeconfig
  2. apiVersion: v1
  3. kind: Config
  4. clusters:
  5.   - cluster:
  6.       server: http://192.168.0.211:8080
  7.     name: local
  8. contexts:
  9.   - context:
  10.       cluster: local
  11.     name: local
  12. current-context: local

kubeconfig文件用于kubelet连接master apiserver。

创建配置文件:

  1. # vi /opt/kubernetes/cfg/kubelet            
  2. # 启用日志标准错误
  3. KUBE_LOGTOSTDERR="--logtostderr=true"
  4. # 日志级别
  5. KUBE_LOG_LEVEL="--v=4"
  6. # Kubelet服务IP地址
  7. NODE_ADDRESS="--address=192.168.0.212"
  8. # Kubelet服务端口
  9. NODE_PORT="--port=10250"
  10. # 自定义节点名称
  11. NODE_HOSTNAME="--hostname-override=192.168.0.212"
  12. # kubeconfig路径,指定连接API服务器
  13. KUBELET_KUBECONFIG="--kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig"
  14. # 允许容器请求特权模式,默认false
  15. KUBE_ALLOW_PRIV="--allow-privileged=false"
  16. # DNS信息
  17. KUBELET_DNS_IP="--cluster-dns=10.10.10.2"
  18. KUBELET_DNS_DOMAIN="--cluster-domain=cluster.local"
  19. # 禁用使用Swap
  20. KUBELET_SWAP="--fail-swap-on=false"

创建systemd服务文件:

  1. # vi /lib/systemd/system/kubelet.service
  2. [Unit]
  3. Description=Kubernetes Kubelet
  4. After=docker.service
  5. Requires=docker.service
  6. [Service]
  7. EnvironmentFile=-www.meiwanyule.cn /opt/kubernetes/cfg/kubelet
  8. ExecStart=/opt/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
  9. KillMode=process
  10. [Install]
  11. WantedBy=multi-user.target

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

  1. # systemctl daemon-reload
  2. # systemctl enable kubelet
  3. # systemctl restart kubelet

3.4.2 proxy

创建配置文件:

  1. # vi /opt/kubernetes/cfg/kube-proxy            
  2. # 启用日志标准错误
  3. KUBE_LOGTOSTDERR="www.taohuayuan178.com --logtostderr=true"
  4. # 日志级别
  5. KUBE_LOG_LEVEL="--v=4"
  6. # 自定义节点名称
  7. NODE_HOSTNAME="--hostname-override=192.168.0.212"
  8. # API服务地址
  9. KUBE_MASTER="--master=http://192.168.0.211:8080"

创建systemd服务文件:

  1. # vi /lib/systemd/system/kube-proxy.service
  2. [Unit]
  3. Description=Kubernetes Proxy
  4. After=network.target
  5. [Service]
  6. EnvironmentFile=-/www.mhylpt.com/ www.feifanyule.cn opt/kubernetes/cfg/kube-proxy
  7. ExecStart=/opt/kubernetes/bin/kube-proxy ${KUBE_LOGTOSTDERR} ${KUBE_LOG_LEVEL} ${NODE_HOSTNAME} ${KUBE_MASTER}
  8. Restart=on-failure
  9. [Install]
  10. WantedBy=multi-user.target

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

  1. # systemctl daemon-reload
  2. # systemctl enable www.feifanyule.cn kube-proxy
  3. # systemctl restart kube-proxy

3.4.3 小结

其他节点加入集群与node01方式相同,但需修改kubelet的--address和--hostname-override选项为本机IP。

查看Node节点组件进程状态:

说明组件都在运行。

如果启动失败,请查看启动日志,例如:

#journalctl -u kubelet

3.5 验证集群是否部署成功

设置可执行文件到系统变量,方便使用:

  1. # echo "export PATH=$PATH:/opt/kubernetes/bin" >> /etc/profile
  2. # source /etc/profile

查看集群节点状态:

两个节点都加入到了kubernetes集群,就此部署完成。

博主会继续更新Kubernetes相关文章,有需要的朋友可以关注下。

二进制包部署Kubernetes集群的更多相关文章

  1. 二进制安装部署kubernetes集群---超详细教程

    本文收录在容器技术学习系列文章总目录 前言:本篇博客是博主踩过无数坑,反复查阅资料,一步步搭建完成后整理的个人心得,分享给大家~~~ 本文所需的安装包,都上传在我的网盘中,需要的可以打赏博主一杯咖啡钱 ...

  2. 二进制部署 Kubernetes 集群

    二进制部署 Kubernetes 集群   提供的几种Kubernetes部署方式 minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernet ...

  3. 二进制方法-部署k8s集群部署1.18版本

    二进制方法-部署k8s集群部署1.18版本 1. 前置知识点 1.1 生产环境可部署kubernetes集群的两种方式 目前生产部署Kubernetes集群主要有两种方式 kuberadm Kubea ...

  4. 二进制方式搭建Kubernetes集群

    环境准备: 演练暂时用单节点一台master和一台node节点来进行部署搭建(kubernetes 1.19版本) 角色 IP 组件 master 10.129.246.114 kube-apiser ...

  5. 和我一步步部署 kubernetes 集群

    和我一步步部署 kubernetes 集群 本系列文档介绍使用二进制部署最新 kubernetes v1.6.1 集群的所有步骤,而不是使用 kubeadm 等自动化方式来部署集群: 在部署的过程中, ...

  6. 基于TLS证书手动部署kubernetes集群(下)

    一.master节点组件部署 承接上篇文章--基于TLS证书手动部署kubernetes集群(上),我们已经部署好了etcd集群.flannel网络以及每个节点的docker,接下来部署master节 ...

  7. kubeadm部署Kubernetes集群

    Preface 通过kubeadm管理工具部署Kubernetes集群,相对离线包的二进制部署集群方式而言,更为简单与便捷.以下为个人学习总结: 两者区别在于前者部署方式使得大部分集群组件(Kube- ...

  8. 使用Kubespray部署Kubernetes集群

    转载请标明出处: http://blog.csdn.net/forezp/article/details/82730382 本文出自方志朋的博客 Kubespray是Google开源的一个部署生产级别 ...

  9. (转)基于TLS证书手动部署kubernetes集群(下)

    转:https://www.cnblogs.com/wdliu/p/9152347.html 一.master节点组件部署 承接上篇文章--基于TLS证书手动部署kubernetes集群(上),我们已 ...

随机推荐

  1. linux 查看帐号创建时间

    查看用户的home目录的创建时间 查看日志 用stat 命令,可以看到目录的三个时间.不过这个时间只是用来参考的,确定一个范围. 查看日志是最准确的方法 /var/log/auth.log ,前提是你 ...

  2. LigerUI的下拉框行和树的设置(表单生成)

    http://blog.csdn.net/dxnn520/article/details/8194767 // ---------------------- // [下拉树设置 -- 单选] {dis ...

  3. 基于GMap.NET地图下载器的开发和研究

    基于GMap.NET地图下载器的开发和研究 软件下载地址:https://pan.baidu.com/s/1ay0aOm3fiZ35vlfD8kFYFw 1.地图浏览功能 可以浏览谷歌地图.百度.ar ...

  4. 关于小程序 input 组件内容显示不全(显示的长度不满 input 宽度)问题

    问题:小程序的input组件经常用到,但在使用input组件的时候会出现一种现象:明明设置了input的宽度,但是输入的内容显示的长度范围却怎么都不到一整个input组件的宽度,而且后面没显示的地方无 ...

  5. 【dp】奶牛家谱 Cow Pedigrees

    令人窒息的奶牛题 题目描述 农民约翰准备购买一群新奶牛. 在这个新的奶牛群中, 每一个母亲奶牛都生两个小奶牛.这些奶牛间的关系可以用二叉树来表示.这些二叉树总共有N个节点(3 <= N < ...

  6. 【组合数学】cf660E. Different Subsets For All Tuples

    比较套路的组合数学题 For a sequence a of n integers between 1 and m, inclusive, denote f(a) as the number of d ...

  7. redis redis-cli 操作指令

    默认选择 db库是 0 redis-cli -p 6379   查看当前所在“db库”所有的缓存key redis 127.0.0.1:6379> keys *   选择 db库 redis 1 ...

  8. jquery 省市区联动插件

    使用方式: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  9. Oracle 数据库密码过期问题

    (1)在CMD命令窗口中输入:           sqlplus 用户名/密码@数据库本地服务名 as sysdba;(如:sqlplus scott/1234@oracle1 as sysdba; ...

  10. pandas知识点(处理缺失数据)

    pandas使用浮点值NaN表示浮点和非浮点数组中的缺失数据: In [14]: string_data = Series(['aardvark','artichoke',np.nan,'avocad ...