k8s集群部署

本文档详细介绍了在CentOS7环境下,如何配置和搭建Kubernetes(k8s)集群。包括环境准备、关闭防火墙与Selinux、禁用Swap、配置ssh免密登录、主机名解析、yum源设置、开启iptables桥接和路由转发等。接着,通过kubeadm初始化主节点,部署网络Flannel,并让node01和node02节点加入到集群。整个过程详尽且实用,适合k8s初学者参考。
摘要由CSDN通过智能技术生成

一、环境准备

系统版本主机名IP基于的服务
CentOS 7.8master10.206.44.62Docker
CentOS 7.8node0110.206.44.64Docker
CentOS 7.5node0210.206.47.167Docker

二、部署前准备

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

三台主机均需配置

#确认docker版本
[root@master appdeploy]# docker -v
Docker version 19.03.9, build 9d988398e7

#关闭防火墙状态
[root@master appdeploy]# systemctl stop firewalld
[root@master appdeploy]# systemctl disable firewalld
[root@master appdeploy]# systemctl status firewalld
● firewalld.service
   Loaded: masked (/dev/null; bad)
   Active: inactive (dead)

#关闭Selinux
[root@master appdeploy]# setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
setenforce: SELinux is disabled

#清空iptables规则
[root@master appdeploy]# iptables -F

#重启docker服务
[root@master appdeploy]# systemctl daemon-reload
[root@master appdeploy]# systemctl restart docker

#关闭虚拟内存
[root@master appdeploy]# setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
setenforce: SELinux is disabled

#重新加载挂载的配置文件
[root@master appdeploy]# mount -a

#确认输出的swap行都为0
[root@master appdeploy]# free -h
              total        used        free      shared  buff/cache   available
Swap:            0B          0B          0B
2、配置ssh免密登录、主机名解析及yum源

三台主机均需配置

#添加三台主机的解析
[root@master appdeploy]# vim /etc/hosts
10.206.44.62 master
10.206.44.64 node01
10.206.47.167 node02

#配置yum源
[root@master appdeploy]# vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=kubneters
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0

#查看配置的yum源中有没有可用的包
[root@master appdeploy]# yum repolist
repo id        repo name        status
kubernetes     kubneters        810       #返回的这一行不可为0

#制作yum元数据缓存
[root@master appdeploy]# yum makecache
3、打开iptables桥接功能及路由转发
#打开iptables桥接功能
[root@master appdeploy]# vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1

#刷新配置
[root@master appdeploy]# sysctl -p /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
# PS:如果报错“找不到文件”,需要执行下面的命令以便加载一个模块。
[root@master appdeploy]# modprobe br_netfilter    #加载br_netfileter模块

#开启路由转发
[root@master appdeploy]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

#刷新配置
[root@master appdeploy]# sysctl -p
net.ipv4.ip_forward = 1

三、配置k8s集群

1、安装部署k8s相关工具

三台主机均需配置

#安装kubeadm、kubectl、kubelet
[root@master appdeploy]# yum -y install kubeadm-1.15.1 kubectl-1.15.1 kubelet-1.15.1

#设置启动开机自启kubelet服务
[root@master appdeploy]# systemctl enable kubelet.service
2、下载并导入镜像

三台主机均需配置
Kubeadm在初始化k8s集群的时候,会从谷歌云服务器取pull所需的镜像,由于国内网络的原因,无法直接从谷歌pull镜像,所以在初始化之前要先将镜像导入到k8s集群中。

下载镜像 kubeadm-basic.images.tar:https://download.csdn.net/download/qq_42124528/85582716

[root@master appdeploy]# mkdir images
[root@master appdeploy]# cd images/
#上传镜像并解压
[root@master images]# rz
[root@master images]# tar -zxvf kubeadm-basic.images.tar.gz
#确认上传的镜像包,共7个
[root@master kubeadm-basic.images]# ls
apiserver.tar  coredns.tar  etcd.tar  kubec-con-man.tar  pause.tar  proxy.tar  scheduler.tar

#创建load-images.sh,用于批量导入kubeadm-basic镜像
[root@master appdeploy]# vim load-images.sh
#!/bin/bash
ls /home/appdeploy/images/kubeadm-basic.images > /tmp/image-list.txt
cd /home/appdeploy/images/kubeadm-basic.images
for i in $(cat /tmp/image-list.txt)
do
   docker load -i $i
done
rm -rf /tmp/image-list.txt

#给创建的脚本赋权
[root@master appdeploy]# chmod +x load-images.sh

#执行脚本批量导入镜像
[root@master appdeploy]# ./load-images.sh
Loaded image: k8s.gcr.io/kube-apiserver:v1.15.1
Loaded image: k8s.gcr.io/coredns:1.3.1
Loaded image: k8s.gcr.io/etcd:3.3.10
Loaded image: k8s.gcr.io/kube-controller-manager:v1.15.1
Loaded image: k8s.gcr.io/pause:3.1
Loaded image: k8s.gcr.io/kube-proxy:v1.15.1
Loaded image: k8s.gcr.io/kube-scheduler:v1.15.1
3、初始化主节点

只在主节点执行

[root@master appdeploy]# kubeadm init --kubernetes-version=v1.15.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap

#初始化成功后,复制生成的join命令,用于其他节点加入到当前k8s集群,有效期只有24小时
#若初始化失败,可以执行kubeadm reset进行重置
#kubeadm join 10.206.44.62:6443 --token bdve5v.zc3grkcu1cizv1pe     --discovery-token-ca-cert-hash sha256:a21d64843fae7e2ccfad093f7e529bf4a944960ef3a300b66e1b895ee3a24a26

# PS:如果超出24小时,则需在主节点上重新获得新的加入节点命令
[root@master appdeploy]# kubeadm token create --print-join-command

#依次执行
[root@master appdeploy]# mkdir -p $HOME/.kube
[root@master appdeploy]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master appdeploy]# chown $(id -u):$(id -g) $HOME/.kube/config

#查看节点状态
[root@master appdeploy]# kubectl get nodes
NAME     STATUS     ROLES    AGE     VERSION
master   NotReady   master   4m59s   v1.15.1
#可以看到master当前状态为未准备
4、部署网络Flannel

三台主机均需配置

#方法1
[root@master appdeploy]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

#方法2
#将github官网指定的.yml配置文件下载到本地
[root@master appdeploy]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

#或者直接下载 flannel.yaml:https://download.csdn.net/download/qq_42124528/85582540

#指定下载的.yml文件执行相应命令
[root@master appdeploy]# kubectl apply -f flannel.yaml

#部署完成后,查看pod状态
[root@master appdeploy]# kubectl get pod -n kube-system
NAME                             READY   STATUS                  RESTARTS   AGE
kube-flannel-ds-skxb8            0/1     Init:ImagePullBackOff   0          42m
#若STATUS为RUNNING,则可忽略导入flanneld镜像步骤
#若STATUS为Init:ImagePullBackOff,则需进行以下步骤导入镜像

#可以到 https://github.com/coreos/flannel/releases 官方仓库下载镜像, 或者直接使用下面链接下载
#下载镜像 flanneld-v0.18.1-amd64.docker:https://download.csdn.net/download/qq_42124528/85582489

#上传镜像
[root@master appdeploy]# rz

#导入镜像
[root@master appdeploy]# docker load < flanneld-v0.18.1-amd64.docker
64242626f2eb: Loading layer [==================================================>]  5.893MB/5.893MB
ebd5ac721ae3: Loading layer [==================================================>]  12.35MB/12.35MB
2d494ab70ef9: Loading layer [==================================================>]  2.743MB/2.743MB
d022ff88f29e: Loading layer [==================================================>]  42.23MB/42.23MB
5d07ac15a06b: Loading layer [==================================================>]  5.632kB/5.632kB
b1c230abd455: Loading layer [==================================================>]  9.216kB/9.216kB
ada31875f6e2: Loading layer [==================================================>]   7.68kB/7.68kB
Loaded image: flannelcni/flannel:v0.18.1-amd64

#查看docker镜像,已有flannelcni/flannel:v0.18.1-amd64
[root@master appdeploy]# docker images
REPOSITORY           TAG              IMAGE ID        CREATED          SIZE
flannelcni/flannel   v0.18.1-amd64    e237e8506509    38 hours ago     62.2MB

#查看pod状态,全部为Running
[root@k8s-master01 tmp]# kubectl get pod -n kube-system
NAMESPACE      NAME                     READY   STATUS     RESTARTS    AGE
kube-system    kube-flannel-ds-cs8wf    1/1     Running    0           5h54m
kube-system    kube-proxy-p5h78         1/1     Running    0           5h54m
#此时STATUS均为Running

#再次查看master状态,已经变成了Ready
[root@master appdeploy]# kubectl get nodes
NAME     STATUS   ROLES    AGE   VERSION
master   Ready    master   20m   v1.15.1
5、node01及node02加入master集群

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

[root@node01 appdeploy]# kubeadm join 10.206.44.62:6443 --token exv0mq.0yk6wtb7zjxc5cim     --discovery-token-ca-cert-hash sha256:a21d64843fae7e2ccfad093f7e529bf4a944960ef3a300b66e1b895ee3a24a26
#This node has joined the cluster

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

[root@master appdeploy]# kubectl get nodes
NAME     STATUS   ROLES    AGE   VERSION
master   Ready    master   6h    v1.15.1
node01   Ready    <none>   4h    v1.15.1
node02   Ready    <none>   21m   v1.15.1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值