使用kubeadm部署Kubernetes集群
一、环境架构与部署准备
1.集群节点架构与各节点所需安装的服务如下图:
2.安装环境与软件版本:
Master:
所需软件:docker-ce 17.03、kubelet1.11.1、kubeadm1.11.1、kubectl1.11.1
所需镜像:
mirrorgooglecontainers/kube-proxy-amd64:v1.11.1、mirrorgooglecontainers/kube-scheduler-amd64:v1.11.1、mirrorgooglecontainers/kube-controller-manager-amd64:v1.11.1、mirrorgooglecontainers/kube-apiserver-amd64:v1.11.1、coredns/coredns:1.1.3、mirrorgooglecontainers/etcd-amd64:3.2.18、mirrorgooglecontainers/pause:3.1、registry.cn-hangzhou.aliyuncs.com/readygood/flannel:v0.10.0-amd64
Node:
所需软件:docker-ce 17.03、kubelet1.11.1、kubeadm1.11.1
所需镜像:mirrorgooglecontainers/kube-proxy-amd64:v1.11.1、mirrorgooglecontainers/pause:3.1、registry.cn-hangzhou.aliyuncs.com/readygood/flannel:v0.10.0-amd64
二、部署Master
1.关闭Firewall和SELinux
由于kubeadm在初始化时会自动生成ipv4规则,所以尽量在部署前关闭防火墙。
2.配置阿里云的Kubernetes镜像和Docker-ce镜像并安装
K8s yum源配置:
[k8s]
name=k8s
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgchecke=
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
enabled=
Docker-ce源配置:
wget -o /etc/yum.repos.d/ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
修改Docker镜像默认拉取源:
mkdir -p /etc/docker
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
安装注意指定版本:
yum install -y --setopt=obsoletes= docker-ce-17.03..ce-.el7.centos.x86_64 docker-ce-selinux-17.03..ce-.el7.centos.noarch
yum install kubelet-1.11. kubeadm-1.11. kubectl-1.11.1 -y
3.设置内核转发规则,即要求iptables对bridge的数据进行处理,默认为0.
echo > /proc/sys/net/bridge/bridge-nf-call-iptables
4.关闭或者忽略swap,部署Kubernetes集群时尽量不要使用swap分区,Kubernetes会提示是否要关闭或者忽略,忽略方式如下:
vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
5.初始化Kubernetes
kubeadm init --kubernetes-version=1.11. --pod-network-cidr=10.244.0.0/ --service-cidr=10.96.0.0/ --ignore-preflight-errors=Swap
如果在初始化中出现错误可以使用 kubeadm reset 重置初始化,如果出现" [kubelet-check] It seems like the kubelet isn't running or healthy. "的错误,建议检查swap设置。
初始化完成会出现如下提示,按提示完成操作初始化便完成,最后一段数字一定要保留下来,这是加入集群必须要的认证信息:
Your Kubernetes master has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/ You can now join any number of machines by running the following on each node
as root:
kubeadm join 192.168.29.111: --token 4qswp9.rxgwhn0vqp4c9npl --discovery-token-ca-cert-hash sha256:2d9bc0bd6b1eb12dcb8695f17191b243ecf3ed169d4aafaacc5c5c1272a85f07
6.关于运行Kubernetes所需镜像下载的问题:
由于某些原因无法正常下载官方镜像,但Kubeadm只支持认证官方的镜像标签,所以必须在dockerhub上下载镜像后修改标签才能使用,可使用dockerhub或者阿里云镜像,然后修改标签名:
mirrorgooglecontainers/kube-proxy-amd64
mirrorgooglecontainers/kube-apiserver-amd64
mirrorgooglecontainers/kube-scheduler-amd64
mirrorgooglecontainers/kube-controller-manager-amd64
coredns/coredns
mirrorgooglecontainers/etcd-amd64
mirrorgooglecontainers/pause
k8s.gcr.io/kube-proxy-amd64 v1.11.1 d5c25579d0ff weeks ago .8MB
k8s.gcr.io/kube-scheduler-amd64 v1.11.1 272b3a60cd68 weeks ago .8MB
k8s.gcr.io/kube-controller-manager-amd64 v1.11.1 52096ee87d0e weeks ago 155MB
k8s.gcr.io/kube-apiserver-amd64 v1.11.1 816332bd9d11 weeks ago 187MB
k8s.gcr.io/coredns 1.1. b3b94275d97c months ago .6MB
k8s.gcr.io/etcd-amd64 3.2. b8df3b177be2 months ago 219MB
quay.io/coreos/flannel v0.10.0-amd64 f0fad859c909 months ago .6MB
k8s.gcr.io/pause 3.1 da86e6ba6ca1 months ago 742kB
7.关于flannel的安装
在确定已经下载镜像 quay.io/coreos/flannel 后(能访问谷歌请忽略),运行下面的命令。
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
三、Nodes部署
1.安装node所需组件
和master一样,需要安装docker、kubeadm、kubelet,并设置开机自启,步骤参考master,这里不赘述了。下载好Node所需镜像,并重命名为k8s.gcr.io/:
mirrorgooglecontainers/kube-proxy-amd64 v1.11.1 d5c25579d0ff months ago 97.8 MB
registry.cn-hangzhou.aliyuncs.com/readygood/flannel v0.10.0-amd64 50e7aa4dbbf8 months ago 44.6 MB
registry.cn-hangzhou.aliyuncs.com/readygood/pause 3.1 da86e6ba6ca1 months ago kB
docker镜像下载完成后初始化flannel服务:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
2.初始化node节点
kubeadm join 192.168.29.111: --token 4qswp9.rxgwhn0vqp4c9npl --discovery-token-ca-cert-hash sha256:2d9bc0bd6b1eb12dcb8695f17191b243ecf3ed169d4aafaacc5c5c1272a85f07 --ignore-preflight-errors=Swap
如果不关闭swap同样需要配置swap设置以及修改iptables对bridge的数据进行处理设置:
vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
出现如下提示即初始化完成:
This node has joined the cluster:
* Certificate signing request was sent to master and a response
was received.
* The Kubelet was informed of the new secure connection details. Run 'kubectl get nodes' on the master to see this node join the cluster.
查看集群状态:
]# kubectl get pods -n kube-system -o wide
NAME READY STATUS RESTARTS AGE IP NODE
coredns-78fcdf6894-kpt2k / Running 18h 10.244.0.5 master
coredns-78fcdf6894-nzdkz / Running 18h 10.244.0.4 master
etcd-master / Running 16h 192.168.29.111 master
kube-apiserver-master / Running 16h 192.168.29.111 master
kube-controller-manager-master / Running 16h 192.168.29.111 master
kube-flannel-ds-amd64-5gnd8 / Running 16h 192.168.29.111 master
kube-flannel-ds-amd64-7rtb8 / Running 2h 192.168.29.112 node1
kube-flannel-ds-amd64-qqjdv / Running 2h 192.168.29.113 node2
kube-proxy-kfsfj / Running 2h 192.168.29.113 node2
kube-proxy-lnk67 / Running 2h 192.168.29.112 node1
kube-proxy-v8d2q / Running 18h 192.168.29.111 master
kube-scheduler-master / Running 16h 192.168.29.111 master
]# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
master Ready master 18h v1.11.1 192.168.29.111 <none> CentOS Linux (Core) 3.10.-.el7.x86_64 docker://17.3.2
node1 Ready <none> 2h v1.11.1 192.168.29.112 <none> CentOS Linux (Core) 3.10.-.el7.x86_64 docker://17.3.2
node2 Ready <none> 2h v1.11.1 192.168.29.113 <none> CentOS Linux (Core) 3.10.-.el7.x86_64 docker://17.3.2
还需要特别注意的是,各Node之间的主机名不要相同,一定要修改,不然Kubeadm会识别为同一Node而无法加入。
Node2和Node3的部署和Node1相同,可以完全按照Node1的方法来部署。
使用kubeadm部署Kubernetes集群的更多相关文章
- kubeadm部署Kubernetes集群
Preface 通过kubeadm管理工具部署Kubernetes集群,相对离线包的二进制部署集群方式而言,更为简单与便捷.以下为个人学习总结: 两者区别在于前者部署方式使得大部分集群组件(Kube- ...
- 解决kubeadm部署kubernetes集群镜像问题
kubeadm 是kubernetes 的集群安装工具,能够快速安装kubernetes 集群.kubeadm init 命令默认使用的docker镜像仓库为k8s.gcr.io,国内无法直接访问,需 ...
- K8s 二、(1、kubeadm部署Kubernetes集群)
准备工作 满足安装 Docker 项目所需的要求,比如 64 位的 Linux 操作系统.3.10 及以上的内核版本: x86 或者 ARM 架构均可: 机器之间网络互通,这是将来容器之间网络互通的前 ...
- kubernetes-使用kubeadm部署kubernetes集群
k8s官网介绍 Kubernetes是一个可移植的,可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化.它拥有一个庞大且快速增长的生态系统.Kubernetes的服务,支持和工 ...
- 使用KubeAdm部署Kubernetes集群——如何访问google代码仓库及Yum源
一.申请国外服务器,部署ShadowSock服务 1.下载并创建配置文件 wget https://github.com/shadowsocks/shadowsocks-go/releases/dow ...
- (二)Kubernetes kubeadm部署k8s集群
kubeadm介绍 kubeadm是Kubernetes项目自带的及集群构建工具,负责执行构建一个最小化的可用集群以及将其启动等的必要基本步骤,kubeadm是Kubernetes集群全生命周期的管理 ...
- Kubernetes探索学习001--Centos7.6使用kubeadm快速部署Kubernetes集群
Centos7.6使用kubeadm快速部署kubernetes集群 为什么要使用kubeadm来部署kubernetes?因为kubeadm是kubernetes原生的部署工具,简单快捷方便,便于新 ...
- 和我一步步部署 kubernetes 集群
和我一步步部署 kubernetes 集群 本系列文档介绍使用二进制部署最新 kubernetes v1.6.1 集群的所有步骤,而不是使用 kubeadm 等自动化方式来部署集群: 在部署的过程中, ...
- 二进制部署 Kubernetes 集群
二进制部署 Kubernetes 集群 提供的几种Kubernetes部署方式 minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernet ...
随机推荐
- phantomjs api文档
phantomjs实现了一个无界面的webkit浏览器.虽然没有界面,但dom渲染.js运行.网络访问.canvas/svg绘制等功能都很完备,在页面抓取.页面输出.自动化测试等方面有广泛的应用. 详 ...
- c# 集合的长度为什么是可变的
摘要: 写在前面:此随笔仅仅是作为个人学习总结,有不对的地方,请各位前辈指正O(∩_∩)O........ 一: 引入 在学习集合之前我们都学习过数组.可以知道数组的长度在声明的时候就已经被固定了,不 ...
- 《SpringMVC从入门到放肆》十四、SpringMVC分组数据校验
上一篇我们学习了数据校验,但是在实际项目中,还是有些不够灵活,今天我们就来继续学习一种更灵活的数据校验方法——分组数据校验. 一.什么是分组校验 校验规则是定义在实体中的,而同一个实体可以被多个Con ...
- DOM与BOM
DOM 1.概念起源: 文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.在网页上,组织页面(或文档)的对象被组织在一个树形结 ...
- webpack2入门概念
webpack是一种JavaScript应用模块化打包工具,它配置起来简单易上手,因此很多企业工程化代码都使用它来打包.在具体介绍如何使用webpack之前,先来介绍下webpack的四个核心概念. ...
- 找一个数组的最大和的连续子数组(时间复杂度 O(n))(二)
要求: 要求数组从文件读取. 如果输入的数组很大, 并且有很多大的数字, 就会产生比较大的结果 (考虑一下数的溢出), 请保证你的程序能正常输出. 另外, 如果输入文件的参数有错误, 这个程序应该 ...
- ubuntu解压时中文出现乱码
一.乱码类似这样的:╫╩┴╧╖┤╤▌▓т╒╛╦┘╢╚│ 今天遇到需要上传十几G的图片,在wins上压缩成zip格式,在上传到服务器上,结果出现乱码.然后各种百度心塞. 最初查到原因: 这个主要是因为z ...
- Java作业 十一(2017-11-13)
/*关键字*/ package com.baidu.www; abstract class A { private String name; public A(String name) { this. ...
- WebGL绘制有宽度的线
WebGL中有宽度的线一直都是初学者的一道门槛,因为在windows系统中底层的渲染接口都是D3D提供的,所以无论你的lineWidth设置为多少,最终绘制出来的只有一像素.即使在移动端可以设置有宽度 ...
- CAS实现单点登录SSO执行原理及部署
一.不落俗套的开始 1.背景介绍 单点登录:Single Sign On,简称SSO,SSO使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. CAS框架:CAS(Centra ...