kubeadm部署Kubernetes集群
Preface
通过kubeadm管理工具部署Kubernetes集群,相对离线包的二进制部署集群方式而言,更为简单与便捷。以下为个人学习总结:
两者区别在于前者部署方式使得大部分集群组件(Kube-piserver、Kube-controller-manager、Kube-proxy、Kube-scheduler、CoreDNS等)以系统资源容器的形式运行在服务器上,而后者部署方式使得组件以服务形式运行在服务器上;当集群组件异常或者down状态时,前者可通过集群机制自动拉起,而后者则需人为操作;
当要配增集群资源时,无非是向集群中加入新增的Node节点,kubeadm部署方式则可通过简单命令实现高效添加,而二进制部署方式则需根据Node节点部署过程从头至尾进行操作;
因国内无法访问google资源,故此实验采用作者制作的Kubernetes组件仓库资源,因服务器资源有限,故采用一台Master和一台Node完成实验,实操见下文!
Set env
Master 10.1.65.131 # kubelet, kubeadm, docker
Node 10.1.65.132 # kubelet, kubeadm, docker
# Close firewalld
systemctl stop firewalld
systemctl disable firewalld
# Close selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
# Close swap
swapoff -a # temporary change
vim /etc/fstab # permanent change
# Edit file
# cat /etc/hosts
10.1.65.131 master
10.1.65.132 node1
# Time synchronization
yum install ntpdate -y
ntpdate ntp.api.bz
Operation
# Install for all machine
# Install docker
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum localinstall -y https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.3.ce-1.el7.noarch.rpm
yum install docker-ce-17.03.3.ce -y # The largest version is 17.03 currently supported for kubeadm;
systemctl start docker && systemctl enable docker
# Down images
# 脚本需在Master及Node节点执行,下载镜像,后续多数插件都是以docker形式运行;
# cat down-images.sh
#!/bin/bash
images=(
kube-apiserver:v1.12.0
kube-controller-manager:v1.12.0
kube-scheduler:v1.12.0
kube-proxy:v1.12.0
pause:3.1
etcd:3.2.24
coredns:1.2.2
)
for i in ${images[@]}
do
docker pull kazihuo/$i
docker tag kazihuo/$i k8s.gcr.io/$i
docker rmi -f kazihuo/$i
done
# Yum configuration
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# Install kubeadm,kubelet and kubectl
yum -y install kubelet-1.12.0 kubeadm-1.12.0 kubectl-1.12.0 --disableexcludes=kubernetes
systemctl enable kubelet
# 初始化Master;
# 若初始化失败或之前有过初始化操作的,先执行以下操作:
kubeadm reset
ifconfig cni0 down && ip link delete cni0
ifconfig flannel.1 down && ip link delete flannel.1
rm -rf /var/lib/cni/
[root@master ~]# kubeadm init --kubernetes-version=v1.12.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
[init] using Kubernetes version: v1.12.0 [preflight] running pre-flight checks [preflight/images] Pulling images required for setting up a Kubernetes cluster [preflight/images] This might take a minute or two, depending on the speed of your internet connection [preflight/images] You can also perform this action in beforehand using 'kubeadm config images pull' ... ... [addons] Applied essential addon: kube-proxy 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 10.1.65.131: --token na5io2.rcducfd1bf889rzy --discovery-token-ca-cert-hash sha256:ddd3923e15175c389f92ad52070bd383648afb850c661973463b2fc60c504bd2
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 安装Pod网络插件;
[root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 查看token(有效时间为24h);
[root@master ~]# kubeadm token list
# 当token失效后,重新创建;
[root@master ~]# kubeadm token create
# 查看discovery-token;
[root@master ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
# 加入工作节点;
# Node节点上操作,格式:kubeadm join masterip:6443 --token:xxxx --discovery-token-ca-cert-hash sha256:xxxx
[root@node1 ~]# kubeadm join 10.1.65.131:6443 --token na5io2.rcducfd1bf889rzy --discovery-token-ca-cert-hash sha256:ddd3923e15175c389f92ad52070bd383648afb850c661973463b2fc60c504bd2
# 状态查看
[root@master ~]# kubectl get pods -n kube-system

Skills
# Node节点执行kubectl命令
[root@master ~]# scp /etc/kubernetes/admin.conf node1:/etc/kubernetes/
[root@node1 ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
[root@node1 ~]# source ~/.bash_profile
[root@node1 ~]# kubectl get pods
Problems
# kubeadm init error
# 问题描述
[root@master ~]# kubeadm init --apiserver-advertise-address 10.1.65.131 --pod-network-cidr=10.10.0.0/16 --apiserver-advertise-address=10.1.65.131
[init] using Kubernetes version: v1.12.2
[preflight] running pre-flight checks
[preflight] Some fatal errors occurred:
[ERROR DirAvailable--var-lib-etcd]: /var/lib/etcd is not empty
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
# 问题解决
因为之前有过etcd的部署与卸载,故在/var/lib/etcd目录下存在备份文件,故手动删除即可。
[root@master ~]# rm -rf /var/lib/etcd/*
kubeadm部署Kubernetes集群的更多相关文章
- 使用kubeadm部署Kubernetes集群
一.环境架构与部署准备 1.集群节点架构与各节点所需安装的服务如下图: 2.安装环境与软件版本: Master: 所需软件:docker-ce 17.03.kubelet1.11.1.kubeadm1 ...
- 解决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 ...
随机推荐
- python list的一个面试题
面试题''' 一个list,里面的数字偶数在左边,奇数在右边,不借助其他列表 ''' def userlist(add_list): if type(add_list)==list: if len(a ...
- kubernetes部署mysql
第一章 部署K8S集群 https://www.cnblogs.com/zoulixiang/p/9504324.html 第二章 1.新建mysql-rc.yaml vi mysql-rc.yaml ...
- 物理机通过http访问eNSP虚拟Server
由于测试需要,本文主要通过一个简单的例子介绍通过物理机的浏览器访问华为eNSP虚拟Server,访问网页. 1.首先配置虚拟网卡的地址 2.通过华为的eNSP模拟软件,做出如下拓扑结构图,配置地址如图 ...
- python + selenium webdriver 自动化测试 之 环境异常处理 (持续更新)
1.webdriver版本与浏览器版本不匹配,在执行的时候会抛出如下错误提示 selenium.common.exceptions.WebDriverException: Message: unkno ...
- Apache Ignite 学习笔记(四): Ignite缓存冗余备份策略
Ignite的数据网格是围绕着基于内存的分布式key/value存储能力打造的.当初技术选型的时候,决定用Ignite也是因为虽然同样是key/value存储,它有着和其他key/value存储系统不 ...
- CryptoZombies学习笔记——Lesson2
第二课是僵尸猎食,将把app变得更像一个游戏,添加多人模式,建立更多创造僵尸的方法. chapter1 依然是简介 chapter2:映射和地址 映射相当于一个索引,指向不同地址,不同地址存储的数据不 ...
- 【Alpha】第十次Scrum meeting
姓名 今日完成任务 所耗时间 刘乾 使用jinja2引擎成功做出第一个模板py文件和latex文件!这是零的突破!(途中遇到很多坑我也就不吐槽了,真是理想与现实差距满满啊) Issue链接:https ...
- 《Linux内核分析》课程第二周学习总结
姓名:何伟钦 学号:20135223 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...
- Android开发环境(发展演变)
初步接触android,要安装android开发工具时是使用eclipse,这是因为百度靠前的搜索项是eclipse来开 发android,而且那时还不知道android studio. 首先是下载配 ...
- 初学Hadoop之单机模式环境搭建
本文仅作为学习笔记,供大家初学Hadoop时学习参考.初学Hadoop,欢迎有经验的朋友进行指导与交流! 1.安装CentOS7 准备 CentOS系统镜像CentOS-7.0-1406-x86_64 ...