使用kubeadm部署k8s
k8s组件
master,node
master中包括apiserver,scheduler,controller。etcd
apiserver:负责接收用户请求,并且保存至etcd中。
scheduler:负责将apisever中创建的资源根据node的负载情况调度至其他node
controller:负责监控apiserver中用户期望创建资源的状态。如果当前状态与期望状态不同,controller就会试图将资源重启或者删除重建。和拉取容器镜像
etcd:用于保存k8s cluster中的所有配置信息
node节点:kubelet,kube-proxy,docker,pod
docker/容器引擎:运行pod时容器引擎
kubelet:相当于agent,会watch着apiserver中的资源变动,一旦资源跟自己节点有关,则执行调动docker引擎。拉取镜像。创建容器
pod:k8s中的核心基本单元。一个pod中可以存在多个容器。一个pod共享同一组网络空间。IPC。等
kube-proxy:
ADDONS插件:
DNS:用于服务注册服务发现
CNI:容器网络插件。包括(flannel,calico)
k8s中常用的资源类型:Pod,Service,Namespace,Volume。控制器对象。ReplicaSet,deployment,DaemonSet,StatefulSet。等等
使用kubeadm容器化部署k8s
设定时钟同步
若节点可直接访问互联网,直接启动chronyd系统服务,并设定其随系统引导而启动。
~]# systemctl start chronyd.service
~]# systemctl enable chronyd.service
关闭iptables或firewalld服务
关闭并禁用SELinux
若当前启用了SELinux,则需要编辑/etc/sysconfig/selinux文件,禁用SELinux,并临时设置其当前状态为permissive:
~]# sed -i 's@^\(SELINUX=\).*@\1disabled@' /etc/sysconfig/selinux
~]# setenforce 0
禁用Swap设备
部署集群时,kubeadm默认会预先检查当前主机是否禁用了Swap设备,并在未禁用时强制终止部署过程。因此,在主机内存资源充裕的条件下,需要禁用所有的Swap设备,否则,就需要在后文的kubeadm init及kubeadm join命令执行时额外使用相关的选项忽略检查错误。
关闭Swap设备,需要分两步完成。首先是关闭当前已启用的所有Swap设备:
~]# swapoff -a
而后编辑/etc/fstab配置文件,注释用于挂载Swap设备的所有行
启用ipvs内核模块
创建内核模块载入相关的脚本文件/etc/sysconfig/modules/ipvs.modules,设定自动载入的内核模块。文件内容如下:
#!/bin/bash
ipvs_mods_dir="/usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs"
for mod in $(ls $ipvs_mods_dir | grep -o "^[^.]*"); do
/sbin/modinfo -F filename $mod &> /dev/null
if [ $? -eq 0 ]; then
/sbin/modprobe $mod
fi
done
修改文件权限,并手动为当前系统加载内核模块:
~]# chmod +x /etc/sysconfig/modules/ipvs.modules
~]# bash /etc/sysconfig/modules/ipvs.modules
**二、安装程序包(在各主机上完成如下设定) **
1、生成yum仓库配置
首先获取docker-ce的配置仓库配置文件:
~]# wwget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker.repo
而后手动生成kubernetes的yum仓库配置文件/etc/yum.repos.d/kubernetes.repo,内容如下:
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
enabled=1
2、安装相关的程序包
Kubernetes会对经过充分验正的Docker程序版本进行认证,目前认证完成的最高版本是17.03,但docker-ce的最新版本已经高出了几个版本号。管理员可忽略此认证而直接使用最新版本的docker-ce程序,不过,建议根据后面的说明,将安装命令替换为安装17.03版。
~]# yum install docker-ce -y
~]# yum install kubelet kubeadm kubectl -y
三、启动docker服务(在各节点执行)
另外,docker自1.13版起会自动设置iptables的FORWARD默认策略为DROP,这可能会影响Kubernetes集群依赖的报文转发功能,因此,需要在docker服务启动后,重新将FORWARD链的默认策略设备为ACCEPT,方式是修改/usr/lib/systemd/system/docker.service文件,在“ExecStart=/usr/bin/dockerd”一行之后新增一行如下内容:
ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT
重载完成后即可启动docker服务:
~]#systemctl daemon-reload
~]# systemctl start docker.service
而后设定docker和kubelet随系统引导自动启动:
~]# systemctl enable docker kubelet
四、初始化主节点(在master上完成如下操作)
1、初始化master节点
若未禁用Swap设备,则需要编辑kubelet的配置文件/etc/sysconfig/kubelet,设置其忽略Swap启用的状态错误,内容如下:
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
(可选步骤)而后,在运行初始化命令之前先运行如下命令单独获取相关的镜像文件,而后再运行后面的kubeadm init命令,以便于观察到镜像文件的下载过程。
~]# kubeadm config images pull
初始化方式一:
运行如下命令完成master01节点的初始化:
~]# kubeadm init --kubernetes-version=v1.16.3 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap --image-repository gcr.azk8s.cn/google_containers
命令中的各选项简单说明如下:
(1) --kubernetes-version选项的版本号用于指定要部署的Kubenretes程序版本,它需要与当前的kubeadm支持的版本保持一致;
(2) --pod-network-cidr选项用于指定分Pod分配使用的网络地址,它通常应该与要部署使用的网络插件(例如flannel、calico等)的默认设定保持一致,10.244.0.0/16是flannel默认使用的网络;
(3) --service-cidr用于指定为Service分配使用的网络地址,它由kubernetes管理,默认即为10.96.0.0/12;
(4) 最后一个选项“--ignore-preflight-errors=Swap”仅应该在未禁用Swap设备的状态下使用。
(5) --image-repository gcr.azk8s.wcn/google_containers 更改默认的镜像仓库指定为国内镜像
初始化方式二:
kubeadm也可通过配置文件加载配置,以定制更丰富的部署选项。以下是个符合前述命令设定方式的使用示例,不过,它明确定义了kubeProxy的模式为ipvs,并支持通过修改imageRepository的值修改获取系统镜像时使用的镜像仓库。
apiVersion: kubeadm.k8s.io/v1alpha2
kind: MasterConfiguration
kubernetesVersion: v1.13.3
api:
advertiseAddress: 172.20.0.71
bindPort: 6443
controlPlaneEndpoint: ""
imageRepository: k8s.gcr.io
kubeProxy:
config:
mode: "ipvs"
ipvs:
ExcludeCIDRs: null
minSyncPeriod: 0s
scheduler: ""
syncPeriod: 30s
kubeletConfiguration:
baseConfig:
cgroupDriver: cgroupfs
clusterDNS:
- 10.96.0.10
clusterDomain: cluster.local
failSwapOn: false
resolvConf: /etc/resolv.conf
staticPodPath: /etc/kubernetes/manifests
networking:
dnsDomain: cluster.local
podSubnet: 10.244.0.0/16
serviceSubnet: 10.96.0.0/12
将上面的内容保存于配置文件中,例如kubeadm-config.yaml,而后执行相应的命令:
~]# kubeadm init --config kubeadm-config.yaml --ignore-preflight-errors=Swap
注意:对于Kubernetes系统的新用户来说,无论使用上述哪种方法,命令运行结束后,请记录最后的kubeadm join命令输出的最后提示的操作步骤。下面的内容是需要用户记录的一个命令输出示例,它提示了后续需要的操作步骤:
2、初始化kubectl
kubectl是kube-apiserver的命令行客户端程序,实现了除系统部署之外的几乎全部的管理操作,是kubernetes管理员使用最多的命令之一。kubectl需经由API server认证及授权后方能执行相应的管理操作,kubeadm部署的集群为其生成了一个具有管理员权限的认证配置文件/etc/kubernetes/admin.conf,它可由kubectl通过默认的“$HOME/.kube/config”的路径进行加载。当然,用户也可在kubectl命令上使用--kubeconfig选项指定一个别的位置。
下面复制认证为Kubernetes系统管理员的配置文件至目标用户(例如当前用户root)的家目录下:
~]# mkdir ~/.kube
~]# cp /etc/kubernetes/admin.conf ~/.kube/config
而后,即可通过kubectl进行客户端命令测试,并借此了解集群组件的当前状态:
~]# kubectl get componentstatus
一个正常的输出应该类似如下输出结果所示:
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health": "true"}
node节点拉取镜像
docker image pull gcr.azk8s.cn/google_containers/kube-proxy:v1.16.3 && docker image pull gcr.azk8s.cn/google_containers/pause:3.1 && docker image pull quay.io/coreos/flannel:v0.11.0-amd64
3、添加flannel网络附件
Kubernetes系统上Pod网络的实现依赖于第三方插件进行,这类插件有近数十种之多,较为著名的有flannel、calico、canal和kube-router等,简单易用的实现是为CoreOS提供的flannel项目。下面的命令用于在线部署flannel至Kubernetes系统之上:
~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
而后使用如下命令确认其输出结果中Pod的状态为“Running”,类似如下所示:
~]# kubectl get pods -n kube-system -l app=flannel
NAME READY STATUS RESTARTS AGE
kube-flannel-ds-amd64-wscnz 1/1 Running 0 14m
五、添加节点到集群中(在node01和node02上分别完成如下操作)
1、若未禁用Swap设备,编辑kubelet的配置文件/etc/sysconfig/kubelet,设置其忽略Swap启用的状态错误,内容如下:
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
kubeadm join 192.168.1.195:6443 --token b3agph.vszgxzb76lneyob5
--discovery-token-ca-cert-hash sha256:19fcd3a8494247f8f12ce17fb65620853301cb07662c2f56c627075d4dbdc3db
部署完成
使用kubeadm部署k8s的更多相关文章
- ubuntu18.04使用kubeadm部署k8s单节点
实验目的: 体验kubeadm部署k8s服务,全流程体验! 实验环境: ubuntu18.04 联网在线部署 kubeadm 01.系统检查 节点主机名唯一,建议写入/etc/hosts 禁止swap ...
- 使用kubeadm部署K8S v1.17.0集群
kubeadm部署K8S集群 安装前的准备 集群机器 172.22.34.34 K8S00 172.22.34.35 K8S01 172.22.34.36 K8S02 注意: 本文档中的 etcd . ...
- 使用kubeadm部署k8s集群[v1.18.0]
使用kubeadm部署k8s集群 环境 IP地址 主机名 节点 10.0.0.63 k8s-master1 master1 10.0.0.63 k8s-master2 master2 10.0.0.6 ...
- Kubeadm部署k8s单点master
Kubeadm部署k8s单点master 1.环境准备: 主机名 IP 说明 宿主机系统 master 10.0.0.17 Kubernetes集群的master节点 CentOS 7.9 node1 ...
- 【02】Kubernets:使用 kubeadm 部署 K8S 集群
写在前面的话 通过上一节,知道了 K8S 有 Master / Node 组成,但是具体怎么个组成法,就是这一节具体谈的内容.概念性的东西我们会尽量以实验的形式将其复现. 部署 K8S 集群 互联网常 ...
- (二)Kubernetes kubeadm部署k8s集群
kubeadm介绍 kubeadm是Kubernetes项目自带的及集群构建工具,负责执行构建一个最小化的可用集群以及将其启动等的必要基本步骤,kubeadm是Kubernetes集群全生命周期的管理 ...
- 在Centos7.6使用kubeadm部署k8s 1.14.3
K8s不是一个软件,而是一堆软件的集合,由于这堆软件各自独立,因此可能k8s安装过程很容易出现问题 K8s部署有多种方式,本文使用kubeadm部署,从易操作性和可控性来说属于中等的方式 环境:cen ...
- kubeadm部署k8s集群
kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具. 这个工具能通过两条指令完成一个kubernetes集群的部署: # 创建一个 Master 节点 kubeadm ini ...
- 解决阿里云ECS下kubeadm部署k8s无法指定公网IP
背景 一般情况下,"kubeadm"部署集群时指定"--apiserver-advertise-address=<public_ip>"参数,即可在 ...
随机推荐
- MSSQL附加数据库时提示以下错误: 无法打开物理文件“***.mdf”。操作系统错误 5:“5(拒绝访问。)”。 (Microsoft SQL Server,错误: 5120)
MSSQL附加数据库时提示以下错误: 无法打开物理文件“***.mdf”.操作系统错误 5:“5(拒绝访问.)”. (Microsoft SQL Server,错误: 5120) ***** 解决方法 ...
- Qt编写数据可视化大屏界面电子看板系统
一.前言 目前大屏大数据可视化UI这块非常火,趁热也用Qt来实现一个,Qt这个一站式超大型GUI超市,没有什么他做不了的,大屏电子看板当然也不在话下,有了QSS和QPainter这两个无敌的工具组合, ...
- 分布式ID生成总结
1.数据库自增id 新建一个公共库,库里面新建一个序列表,主键id自增,每次请求增加数据都往这个表中插入数据,然后获取到id,然后使用即可. 优点:方便简单 缺点:单库生成自增id,高并发下,会有瓶颈 ...
- Java 文件完整性校验 MD5 sha1 sha256 sha224 sha384 sha512
由于项目中需要使用文件做备份,并且要提供备份文件的下载功能.备份文件体积较大,为确保下载后的文件与原文件一致,需要提供文件完整性校验. 网上有这么多此类文章,其中不少使用到了 org.apache.c ...
- rfc 5280 X.509 PKI 解析
本文以博客园的证书为例讲解,不包含对CRL部分的翻译,如没有对第5章节以及6.3小节进行翻译 3.2. Certification Paths and Trust 下面简单介绍了Public-Key ...
- 【洛谷4482】Border的四种求法(后缀自动机_线段树合并_链分治)
这题我写了一天后交了一发就过了我好兴奋啊啊啊啊啊啊 题目 洛谷 4482 分析 这题明明可以在线做的,为什么我见到的所有题解都是离线啊 -- 什么时候有机会出一个在线版本坑人. 题目的要求可以转化为求 ...
- Mysql的BigInt(20),Int(20)以及Bigint(32)有区别吗?
原文: http://stackoverflow.com/questions/3135804/types-in-mysql-bigint20-vs-int20-etcc http://dev.mysq ...
- tomcat参数调整
(1)maxConnections能接收的最大请求数(nio下默认1W,基本不用调整,足够了): (2)acceptCount在操作系统层面的请求堆积,linux操作系统下除了acceptCount参 ...
- redis学习(一)
Redis学习内容: 1. 概念 2. 下载安装R 3. 命令操作 1. 数据结构 4. 持久化操作 5. 使用Java客户端操作redis 1. 概念: redis是一款高性能的NOSQL系列的非关 ...
- C语言:求π
1835: 圆的面积 本题的关键在于如何求π: 今天先给给大家介绍一种针对本题的方法——利用反三角函数求π. 在高数中arcsin(0)=arccos(1)=π,不过编译器中并没有arcsin和arc ...