在Centos上使用kubeadm搭建kubernetes集群

目的:

  • 搭建一个一主二从的kubernetes集群

  • 在所有节点上安装Docker 和kubeadm

  • 部署Kubernetes Master

  • 部署容器网络插件

  • 部署Kubernetes Node,将节点加入Kubernetes 集群中

一,安装centos

使用VMware,新建虚拟机,选择自定义点击下一步

 继续下一步

选择稍后安装系统,点击下一步

操作系统选择Linux,版本选centos7 64 位,点击下一步

修改虚拟机名字,方便识别。位置根据个人安装习惯不同。点击下一步

处理器给两个核,点击下一步

 内存给2个G,点击下一步

网络类型选择网络地址转换,点击下一步

IO控制器类型,一般默认就是第二个,点击下一步

 磁盘类型,默认第二个就行,点击下一步

 磁盘容量给50G,选择拆分成多个文件。点击下一步

 继续下一步

点击完成

 点击编辑虚拟机设置

选择自己准备好的镜像文件,这里使用的是centos7.5

设置好镜像之后开启虚拟机

 鼠标点进去,通过方向键选择第一个选项,点击回车键

 稍等片刻之后来到安装引导界面,语言选择简体中文,点击继续

软件选择为基础设施服务器

确认安装位置,选择默认的自动配置分区就行

设置网络和主机名

点击配置

 点击常规

点击ipv4设置,自定义地址

 地址必须根据自己的网段来设置,查看网段,点击VM上的编辑

修改主机名,mater节点:master,node节点:node1、node2

上面的全部设置完毕后,点击开始安装

安装过程中,设置root密码

如果你的密码过于简单,需要点击两次完成

稍等片刻后, 出现命令行的登录界面就表示安装完成

其余的两个node节点也按照上面步骤进行即可

二、初始化环境(需要在master节点和node节点同时进行,使用Xshell或者其他可以多窗口会话的工具)

1.检查系统版本,要求Centos版本要在7.5或之上

[root@master ~]# cat /etc/redhat-release

2.主机名解析。

为了方便集群节点间的直接调用,在这个配置一下主机名解析,企业中推荐使用内部DNS服务器

#编辑三台服务器的/etc/hosts文件,像如下图一样添加三台服务器的ip地址和主机名
vim /etc/hosts

3.时间同步

kubernetes要求集群中的节点时间必须精确一直,这里使用chronyd服务从网络同步时间

企业中建议配置内部的会见同步服务器

# 启动chronyd服务
[root@master ~]# systemctl start chronyd
[root@master ~]# systemctl enable chronyd
[root@master ~]# date

4. 禁用iptable和firewalld服务

kubernetes和docker 在运行的中会产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系统的规则

# 1 关闭firewalld服务
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld
# 2 关闭iptables服务
[root@master ~]# systemctl stop iptables
[root@master ~]# systemctl disable iptables

5.禁用selinux

selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的奇葩问题

# 编辑 /etc/selinux/config 文件,修改SELINUX的值为disable
# 注意修改完毕之后需要重启linux服务
vim /etc/selinux/config

6.禁用swap分区

 swap分区指的是虚拟内存分区,它的作用是物理内存使用完,之后将磁盘空间虚拟成内存来使用,启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备,但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明

# 编辑分区配置文件/etc/fstab,注释掉swap分区一行
# 注意修改完毕之后需要重启linux服务
vim /etc/fstab
注释掉 /dev/mapper/centos-swap swap
# /dev/mapper/centos-swap swap

7.修改linux的内核参数

# 修改linux的内核采数,添加网桥过滤和地址转发功能
# 编辑/etc/sysctl.d/kubernetes.conf文件
vim /etc/sysctl.d/kubernetes.conf

# 添加如下配置:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

# 重新加载配置
[root@master ~]# sysctl -p
# 加载网桥过滤模块
[root@master ~]# modprobe br_netfilter
# 查看网桥过滤模块是否加载成功
[root@master ~]# lsmod | grep br_netfilter

8.配置ipvs功能

 在Kubernetes中Service有两种带来模型,一种是基于iptables的,一种是基于ipvs的两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块

# 1.安装ipset和ipvsadm
[root@master ~]# yum install ipset ipvsadm -y
# 2.添加需要加载的模块写入脚本文件
[root@master ~]# cat <<EOF> /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
# 3.为脚本添加执行权限
[root@master ~]# chmod +x /etc/sysconfig/modules/ipvs.modules
# 4.执行脚本文件
[root@master ~]# /bin/bash /etc/sysconfig/modules/ipvs.modules
# 5.查看对应的模块是否加载成功
[root@master ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4

上述步骤完成后重启三台服务器

三、安装docker(需要在master节点和node节点同时进行)

# 1、切换镜像源
[root@master ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

# 2、查看当前镜像源中支持的docker版本(可跳过)
[root@master ~]# yum list docker-ce --showduplicates

# 3、安装特定版本的docker-ce
# 必须制定--setopt=obsoletes=0,否则yum会自动安装更高版本
[root@master ~]# yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y

# 4、添加一个配置文件,配置镜像加速器
#Docker 在默认情况下使用Vgroup Driver为cgroupfs,而Kubernetes推荐使用systemd来替代cgroupfs
[root@master ~]# mkdir /etc/docker
[root@master ~]# cat <<EOF> /etc/docker/daemon.json
{
	"exec-opts": ["native.cgroupdriver=systemd"],
	"registry-mirrors": ["https://kn0t2bca.mirror.aliyuncs.com"]
}
EOF

# 5、重启dokcer、设置开机自启动
[root@master ~]# systemctl restart docker
[root@master ~]# systemctl enable docker

四. 安装Kubernetes组件(需要在master节点和node节点同时进行)

1、由于kubernetes的镜像在国外,速度比较慢,这里切换成国内的镜像源
2、编辑/etc/yum.repos.d/kubernetes.repo

vim /etc/yum.repos.d/kubernetes.repo

     添加下面的配置

[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgchech=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
			http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

3、安装kubeadm、kubelet和kubectl

yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y

4、配置kubelet的cgroup

     编辑/etc/sysconfig/kubelet

vim /etc/sysconfig/kubelet

    添加下面的配置(要是存在其他内容,先删掉再添加)

KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

5、设置kubelet开机自启

systemctl enable kubelet

五、准备集群镜像(需要在master节点和node节点同时进行)

# 在安装kubernetes集群之前,必须要提前准备好集群需要的镜像
# 所需镜像可以通过下面命令查看(可跳过)
[root@master ~]# kubeadm config images list
# 下载镜像
# 此镜像kubernetes的仓库中,由于网络原因,无法连接,下面提供了一种替换方案
images=(
	kube-apiserver:v1.17.4
	kube-controller-manager:v1.17.4
	kube-scheduler:v1.17.4
	kube-proxy:v1.17.4
	pause:3.1
	etcd:3.4.3-0
	coredns:1.6.5
)

for imageName in ${images[@]};do
	docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
	docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
	docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName 
done

查看一下镜像

六、集群初始化(只需要在master节点上执行即可 )

# 创建集群
[root@master ~]# kubeadm init \
	--kubernetes-version=v1.17.4 \
	--pod-network-cidr=10.244.0.0/16 \
	--service-cidr=10.96.0.0/12 \
	--apiserver-advertise-address=(改为mater节点的ip地址)

 当看到下面的这个界面就代表初始化成功

根据下面的提示,创建必要文件

# 创建必要文件
[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

 再根据提示,把下面红方框里面的内容复制到每个node节点上执行(只需要在node节点上执行即可 ),使node节点加入到集群当中

 在master上查看节点信息

kubectl get nodes

 能够看到此时node节点都已加入集群,但状态都是notready,还需要配置网络插件

七、为集群安装网络插件(只在master节点操作即可)

通过下面这个命令,获取flannel网络插件的yml文件,由于是访问外网可能会提示获取失败,多试几次

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

如果还是获取不了,就直接用浏览器访问这个地址,然后把文件下载下来,通过传输工具传到/root目录下

使用配置文件启动fannel

kubectl apply -f kube-flannel.yml

然后稍等一会,大概等五六分钟左右,再查看节点状态

 此时节点已全部准备就绪,集群成功搭建

八、集群测试

创建一个nginx服务

kubectl create deployment nginx  --image=nginx:1.14-alpine

暴露端口

kubectl expose deployment nginx  --port=80  --type=NodePort

查看pod

kubectl get pod

 容器已经跑起来了

查看服务

kubectl get svc

 可以看到nginx对外暴露了一个端口30518

在外部机器上使用浏览器访问

已经能访问nginx的欢迎页 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值