K8s(Kubernetes)简介及安装部署

前言:



k8s是Kubernetes的简称,因为K和S之间有8个字母,所以才会被称为k8s。

k8s最初是在Google公司内部使用了10多年的技术,它的前身是叫做Borg(博格),直到2015年才被Google公司捐赠为开源项目。

如果之前我们有接触过OpenStack,那么应该知道管理VM虚拟机资源可以用OpenStack。那么管理容器所对应的开源平台是什么呢?k8s就是其中之一,在k8s之前也有很多容器管理平台,有docker自身的docker swarm,也有apache推出的Mesos等等。相比较而言,虽然k8s比其他推出的晚了些,但是丝毫不影响其火爆程度,除了其功能强大外,更何况它还有个好爹。

关于k8s更详细的介绍,可以移步至k8s中文文档或者k8s官方网站 ,以便查看更多资料。

接下来开始安装部署k8s。

博文大纲:
一、环境准备
二、部署前准备

  • 1、检查docker版本、关闭防火墙及Selinux、清空iptables规则、禁用Swap交换分区
  • 2、配置ssh免密登录、主机名解析及yum源
  • 3、打开iptables桥接功能及路由转发
    三、配置k8s群集
  • 1、安装部署k8s相关工具
  • 2、初始化k8s集群
  • 3、配置master节点状态
  • 4、配置node01及node02加入master群集
  • 5、部署后的优化配置

一、环境准备

注:上述三台centos 7.3服务器,均运行docker服务,如果是测试环境,那么内存最少2G,CPU至少双核,并且docker服务的版本不建议过高,最好是18.09及以下。

如需部署docker服务,可参考博文:Docker的安装详细配置

二、部署前准备

1、检查docker版本、关闭防火墙及Selinux、清空iptables规则、禁用Swap交换分区

注:以下操作需要在三台docker主机上分别配置一次,哪怕是在生产环境,都需要进行以下操作,因为k8s有它自己的安全策略。

[[email protected] ~]# docker -v       #确认docker版本
Docker version 18.09.0, build 4d60db4
#关闭防火墙
[[email protected] ~]# systemctl stop firewalld
[[email protected] ~]# systemctl disable firewalld
#关闭Selinux
[[email protected] ~]# setenforce 0
[[email protected] ~]# vim /etc/sysconfig/selinux
SELINUX=disabled          #将此处改为disabled
[[email protected] ~]# iptables -F    #清空iptables规则
#重启docker服务
[[email protected] ~]# systemctl daemon-reload
[[email protected] ~]# systemctl restart docker
#禁用swap交换分区
[[email protected] ~]# swapoff -a   #临时禁用swap
[[email protected] ~]# vim /etc/fstab     #打开自动挂载的配置文件,将swap配置项注释掉
#/dev/mapper/cl-swap     swap                    swap    defaults        0 0
#就注释掉上面那行
[[email protected] ~]# mount -a    #重新加载挂载的配置文件
[[email protected] ~]# free -h     #确认输出的swap行如下(都为0):
Swap:            0B          0B          0B

2、配置ssh免密登录、主机名解析及yum源

注:以下没有特别说明的操作,在master主机上操作即可

[[email protected] ~]# tail -3 /etc/hosts        #在该文件添加三台主机的解析
192.168.20.6 master
192.168.20.7 node01
192.168.20.8 node02
#配置ssh免密登录(为了方便在主机间复制配置文件,可不做)
[[email protected] ~]# ssh-keygen -t rsa
[[email protected] ~]# ssh-copy-id node01
[[email protected] ~]# ssh-copy-id node02
#将更改后的hosts文件发送到node01及node02
[[email protected] ~]# scp /etc/hosts node01:/etc/
[[email protected] ~]# scp /etc/hosts node02:/etc/
#接下来配置yum源
[[email protected] ~]# vim /etc/yum.repos.d/kubernetes.repo  #编辑yum文件
[kubernetes]
name=kubneters
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
#以上url是阿里开源镜像站,可复制网址自行查看
[[email protected] yum.repos.d]# yum repolist    #查看刚刚配置的yum源中有没有可用的包
kubernetes               kubneters                      421  #返回的这一行不可为0
[[email protected] yum.repos.d]# yum makecache    #制作yum元数据缓存
#将yum源的配置文件复制到另外两台节点主机上
[root[email protected] ~]# scp /etc/yum.repos.d/kubernetes.repo node01:/etc/yum.repos.d/
[[email protected] ~]# scp /etc/yum.repos.d/kubernetes.repo node02:/etc/yum.repos.d/
#在另外两台主机上,都需执行以下两条命令
[[email protected] ~]# yum repolist
kubernetes               kubneters                      421  #返回的这一行不可为0
[[email protected] ~]# yum makecache

3、打开iptables桥接功能及路由转发

同样,没有特别说明的配置,在master上进行配置即可。

#打开iptables桥接功能
[[email protected] ~]# vim /etc/sysctl.d/k8s.conf    #写入以下配置
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
[[email protected] ~]# sysctl -p /etc/sysctl.d/k8s.conf   #刷新配置
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
# PS:如果报错“找不到文件”,需要执行下面的命令以便加载一个模块。
[[email protected] ~]# modprobe br_netfilter    #加载br_netfileter模块
#将配置的k8s.conf文件复制到另外两台节点
#将配置文件复制到另外两台节点后,需要在node01及02上分别执行下面的命令进行刷新
[[email protected] ~]# sysctl -p /etc/sysctl.d/k8s.conf     #刷新配置文件
#接下来开启路由转发(三台docker主机上都需要进行以下操作)
[[email protected] ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
#开启路由转发
[[email protected] ~]# sysctl -p    #刷新配置
net.ipv4.ip_forward = 1

配置至此,部署前的工作就完成了。

在进行接下来的操作前,需要先下载我提供的镜像。

三、配置k8s群集

1、安装部署k8s相关工具

注:以下操作在master主机上进行

[[email protected] ~]# yum -y install kubelet-1.15.0-0 kubeadm-1.15.0-0 kubectl-1.15.0-0
#安装k8s的master所需组件
[[email protected] ~]# systemctl enable kubelet
#将kubelet加入开机自启,但现在不要启动
[[email protected] ~]# mkdir images
[[email protected]aster ~]# cd images/
[[email protected] images]# rz   #上传我提供的所有镜像包,共8个镜像包
[[email protected] images]# ls   #确认上传的镜像包
coredns-1-3-1.tar         kube-proxy-1-15.tar
etcd-3-3-10.tar           kube-scheduler-1-15.tar
kube-apiserver-1-15.tar   myflannel-11-0.tar
kube-controller-1-15.tar  pause-3-1.tar
#接下来导入上传的镜像包到docker镜像中
[[email protected] images]# docker load < coredns-1-3-1.tar
[[email protected] images]# docker load < etcd-3-3-10.tar
[[email protected] images]# docker load < kube-apiserver-1-15.tar
[[email protected] images]# docker load < kube-controller-1-15.tar
[[email protected] images]# docker load < kube-proxy-1-15.tar
[[email protected] images]# docker load < kube-scheduler-1-15.tar
[[email protected] images]# docker load < pause-3-1.tar
[[email protected] images]# docker load < myflannel-11-0.tar

2、初始化k8s集群

[[email protected] images]# kubeadm init --kubernetes-version=v1.15.0 --pod-network-cidr=10.224.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
                    <!--
这里指定的版本必须和前面yum安装的版本一致。指定的两个网络则是官方建议使用的网段
如果执行上述命令后,返回CPU相关的报错信息,那么需要调大CPU的核心数
初始化成功后,首先复制下面返回的这条命令,并妥善保存
                                              -->
kubeadm join 192.168.20.6:6443 --token xfp7g5.6f2bdfjybt8a1j7r     --discovery-token-ca-cert-hash sha256:17895c549344a83daae4318360dc9c9212b5dc3b1fb7d79ef84a640c63e489e2
                    <!--
上面这条命令是用来其他节点加入到当前k8s群集中需要执行的
一旦丢失,特别麻烦,并且只有24小时有效期,每次初始化群集后产生的都不一样
                                              -->
                <!--
接下来呢,依次执行返回的其他指令,如下(由于我是root用户,所以就省略了sudo指令):
                                    -->
[[email protected] images]# mkdir -p $HOME/.kube
[[email protected] images]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[[email protected] images]# chown $(id -u):$(id -g) $HOME/.kube/config

返回的信息截图如下,供参考:

3、配置master节点状态

[[email protected] images]# kubectl get nodes    #查看群集节点信息
NAME     STATUS     ROLES    AGE   VERSION
master   NotReady   master   14m   v1.15.0
#可以看到master当前状态为未准备

接下来可以去github官网进行以下操作以便查看相应的命令:

点击进入后,下拉页面到以下位置,并复制指定的命令到master节点执行一下:

[[email protected] images]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#执行在github官网复制的命令

以上只是方式之一,在网络状况良好的情况下建议使用上述方法(调用远端文件执行一下),若网速较差,建议使用以下方法:

[[email protected] images]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#将github官网指定的.yml配置文件下载到本地
[[email protected] images]# ls | grep flannel.yml   #确定下载到了当前目录
kube-flannel.yml
[[email protected] images]# kubectl apply -f kube-flannel.yml  #指定下载的.yml文件执行相应命令

上述方法,二选一进行配置即可。

[[email protected] images]# kubectl get nodes   #再次查看master状态,发现已经成为了“Ready”
NAME     STATUS   ROLES    AGE   VERSION
master   Ready    master   30m   v1.15.0
[[email protected] images]# ls /etc/kubernetes/    #k8s的配置文件目录
[[email protected] images]# ls /etc/kubernetes/manifests/   #k8s的.yaml文件存放目录

4、配置node01及node02加入master群集

以下操作需要在node01及node02分别执行一次

[[email protected] ~]# yum -y install kubelet-1.15.0-0 kubeadm-1.15.0-0
#安装k8s相关组件
[[email protected] ~]# systemctl enable kubelet.service    #设置为开机自启
[[email protected] ~]# mkdir images
[[email protected] ~]# cd images/
[[email protected] images]# rz   #上传我提供的镜像文件,共三个,是下面 ls 命令查看的三个

[[email protected] images]# ls    #需要上传的镜像文件如下
kube-proxy-1-15.tar  myflannel-11-0.tar  pause-3-1.tar
[[email protected] images]# docker load < kube-proxy-1-15.tar
[[email protected] images]# docker load < myflannel-11-0.tar
[[email protected] images]# docker load < pause-3-1.tar
[[email protected] images]# kubeadm join 192.168.20.6:6443 --token xfp7g5.6f2bdfjybt8a1j7r --discovery-token-ca-cert-hash sha256:17895c549344a83daae4318360dc9c9212b5dc3b1fb7d79ef84a640c63e489e2
#执行master初始化群集时返回的命令,以便加入到master的群集中

返回以下信息,则表示加入成功:

自行将上述配置在node02主机上配置一次即可

当在node01及node02依次配置完成后,即可在master上进行查看节点状态,如下:

[[email protected] images]# kubectl get nodes    #在master上查看节点信息都为“Ready”
NAME     STATUS   ROLES    AGE     VERSION
master   Ready    master   51m     v1.15.0
node01   Ready    <none>   4m19s   v1.15.0
node02   Ready    <none>   4m13s   v1.15.0

5、部署后的优化配置

其实配置至此,K8s已经完成了,但是为了以后更为方便的使用k8s,建议优化以下几项:

  • 设置table键的默认间距;
  • 设置kubectl命令自动补全;
  • 优化开机自启配置。

1)设置table默认间距(该优化只需在master上进行配置即可,由于经常需要编写.yml文件所以才需要更改table间距)

[[email protected] images]# cd           #切换至宿主目录
[[email protected] ~]# echo "set tabstop=2" >> .vimrc   #将此参数写入.vimrc文件
[[email protected] ~]# bash    #切换shell环境,使更改生效

2)设置kubectl命令自动补全(master和node节点都可配置)

[[email protected] ~]# yum -y install bash-completion
[[email protected] ~]# source /usr/share/bash-completion/bash_completion
[[email protected] ~]# source <(kubectl completion bash)
[[email protected] ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc

3)确认k8s群集没有问题,并设置为开机自启

master主机操作如下:

[[email protected] ~]# kubectl get pod -n kube-system
#查看pod资源,类似于docker中的容器,确保返回的信息都是running
#“-n kube-system”:是k8s的名称空间

上述命令返回的信息如下:

master和node节点上都需要进行以下操作,以便设置为开机自启:

[[email protected] ~]# systemctl enable kubelet
[[email protected] ~]# systemctl enable docker 

设置为开机自启后,k8s群集的配置基本完成了,现在可以重启一下这三台服务器,如果重启后,执行下面的命令,状态都还是running,则表示绝对没有问题了。

[[email protected] ~]# kubectl get pod -n kube-system    #重启后验证状态是否还都是running

———————— 本文至此结束,感谢阅读 ————————

原文地址:https://blog.51cto.com/14154700/2447761

时间: 2024-10-10 19:00:16

K8s(Kubernetes)简介及安装部署的相关文章

k8s监控组件heapster安装部署

k8s监控组件heapster安装部署 参考文档 https://github.com/kubernetes/heapster/tree/master/deploy k8s集群安装部署 http://jerrymin.blog.51cto.com/3002256/1898243  k8s集群RC.SVC.POD部署 http://jerrymin.blog.51cto.com/3002256/1900260     k8s集群组件kubernetes-dashboard和kube-dns部署 h

Kubernetes 生产环境安装部署 基于 Kubernetes v1.14.0 之 部署规划

1. 安装规划 1.1 部署节点说明 etcd集群规划 etcd 中心集群 192.168.2.247192.168.2.248192.168.2.249 etcd 事件集群 192.168.2.250192.168.2.251192.168.2.252 Kubernetes master节点集群规划 192.168.3.10192.168.3.11192.168.3.12192.168.3.13192.168.3.14 Kubernetes master vip 192.168.4.1192.

Mongodb简介及安装部署配置

1.Mongodb简介及安装部署 Mongodb 逻辑结构:Mongodb 逻辑结构 MySQL逻辑结构库database 库集合(collection) 表文档(document) 数据行 2.安装前准备(1)redhat或cnetos6.2以上系统(2)系统开发包完整(3)ip地址和hosts文件解析正常(4)iptables防火墙&SElinux关闭(5)关闭大页内存机制############################################################

Sqoop简介及安装部署

简介: Apache Sqoop是专为Apache Hadoop和结构化数据存储如关系数据库之间的数据转换工具的有效工具.你可以使用Sqoop从外部结构化数据存储的数据导入到Hadoop分布式文件系统或相关系统如Hive和HBase.相反,Sqoop可以用来从Hadoop的数据提取和导出到外部结构化数据存储如关系数据库和企业数据仓库. Sqoop专为大数据批量传输设计,能够分割数据集并创建Hadoop任务来处理每个区块. 下面介绍下安装部署的步骤: 1.下载安装包并解压 下载地址 作者使用的是s

[k8s]kubernetes dashboard的安装

之前一直使用的是命令行,但是又觉得如果连控制台都还没有动手实践过会不会有点low 1.安装dashboard 参阅官网的安装方法,https://github.com/kubernetes/dashboard,安装很简单,如果慢可以使用其它的镜像网站,我这里使用的是mirrorgooglecontainers/kubernetes-dashboard-amd64,然后重新打了k8s.gcr.io/kubernetes-dashboard-amd64的tag 2.暴露服务 [email prote

DB2简介和安装部署

一.DB2相关概念 1.DB2体系结构: DB2体系结构中的最高一层是系统,一个系统表示DB2的一个安装.在由很多机器组成 的网络环境中,我们有时=也称系统为数据库分区,一个系统可以包含多个DB2实例,每个实例能够管理一个或多个数据库. 2.实例(Instance): 实例也称为数据库管理器(Database Management Application),是数据库管理器在内存中的映像,是管理数据的DB2代码.实例相当于Informix  Server,在一台机器上可以有多个相互独立的实例,实例

第一课作业——Redis简介及安装部署

第一课时作业 静哥 by 2016.2.1~2016.2.22   [作业描述] 1.总结redis应用场景和优点 2.安装redis,以服务方式进行安装部署 [作业一:总结redis应用场景和优点] 1. redis应用场景: (1) 符合复杂数据结构和业务的场景,例如:商品的实时价格.库存和订单业务.微博评论.消息队列等: (2) 对宕机时间有要求的,需要利用redis的持久化机制,在宕机后快速恢复数据的业务,例如登录缓存的应用: 2. redis的优点: (1) 开源的.分布式缓存数据库,

Hbase Phoenix简介及其安装部署

1. 什么是Phoenix? phoenix,中文译为“凤凰”,很美的名字.Phoenix是由saleforce.com开源的一个项目,后又捐给了Apache基金会.它相当于一个Java中间件,提供jdbc连接,操作hbase数据表.Phoenix是一个HBase的开源SQL引擎.你可以使用标准的JDBC API代替HBase客户端API来创建表,插入数据,查询你的HBase数据.Phoenix的团队用了一句话概括Phoenix:"We put the SQL back in NoSQL&quo

K8S 1.13.4安装部署

kubeadm是K8S官方提供的集群部署工具.kubeadm将master节点上的apiserver.scheduler.controller-manager.etcd和node节点上的kube-proxy都部署为Pod运行,所以master和node都需要安装kubelet和docker. 1.前期准备主机准备:k8s1 master 192.168.4.35 CentOS7.6 4C8Gk8s2 node1 192.168.4.36 CentOS7.6 4C8Gk8s3 node2 192.