kubeadm快速部署kubernetes集群

在网上找了很多,也看了很多教程,都不够尽善尽美,决定自己记录下自己的部署过程,希望对大家有所帮助

一、系统环境及部署准备

1.1 相关组件与主机环境

  • 操作系统:centos7.4
  • docker版本:18.09.0
  • kubernetes版本:1.14
  • 各主机详细信息如下:
kubernetes集群主机环境
IP 系统 主机名
192.168.40.6 centos7.4 master
192.168.40.7 centos7.4 node01
192.168.40.8 centos7.4 node02

1.2 基础环境设置

1.关闭防火墙

systemctl stop firewalld      #关闭防火墙 
systemctl disable firewalld     #禁止开机启动

2.关闭selinux

sed -i 's@^\(SELINUX=\).*@\1disabled@' /etc/sysconfig/selinux   #永久禁用
setenforce 0   #临时禁用selinux

3.主机名称解析

#在hosts文件里添加各主机间解析
vim /etc/hosts  
192.168.40.6   master
192.168.40.7   node01
192.168.40.8   node02

4.时间同步

yum install ntp -y   #安装同步程序
ntpdate time1.aliyun.com    #同步网络时间

5.禁用swap

swapoff  -a   #临时关闭
#永久关闭
vim /etc/fstab  #注释swap的那一行
# UUID=373f4d94-cf33-4a54-badd-4a612a52e334 swap           swap    defaults        0 0

6.启用ipvs内核模块(可选步骤)

Kubernetes 1.11 之后的版本默认支持使用 ipvs 代理模式的 Service 资源,但它依赖于ipvs 相关的内核模块,而这些模块默认不会自动载人 因此,这里选择创建载入内核模块相关的脚本文件 etc sysconfig modules ipvs modules ,设定于系统引导时自动载入的 ipvs 相关的内核模块,以支持使用 ipvs 代理模式的 Service 资源 文件内容如下:

vim  /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
ipvs_mods_dir="/usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs"
for i in $(ls $ipvs_mods_dir | grep -o "^[^.]*"); do
    /sbin/modinfo -F filename $i &> /dev/null
    if [ $? -eq 0 ] ;then
        /sbin/modprobe $i
    fi
done
#修改文件权限,并手动为当前系统加载内核模块:
chmod +x /etc/sysconfig/modules/ipvs.modules
bash /etc/sysconfig/modules/ipvs.modules 

7.将桥接的IPv4流量传递到iptables的链

RHEL / CentOS 7上的某些用户报告了由于iptables被绕过而导致流量被错误路由的问题。应该确保net.bridge.bridge-nf-call-iptables的sysctl配置中被设置为1

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system   #使生效

二、部署 Kubernetes 集群

2.1 准备repo仓库

#使用阿里云的镜像仓库
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  -O /etc/yum.repos.d/
#同样使用阿里的仓库
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[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

2.2 安装docker

yum -y install docker-ce-18.09.0-3.el7
#镜像加速,docekr官方的效果不佳,可以去阿里云注册个地址
mkdir /etc/docker  &&  vim  /etc/docker/daemon.json
{
	  "registry-mirrors": ["https://registry.docker-cn.com"]
}

另外,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

#启动docekr
systemctl daemon-reload        
systemctl start docker.service
systemctl enable docker

2.3 安装kubeadm,kubelet和kubectl

yum install kubelet-1.14.2-0 kubeadm-1.14.2-0 kubectl-1.14.2-0  -y

若未禁用Swap设备,则需要编辑kubelet的配置文件/etc/sysconfig/kubelet,设置其忽略Swap启用的状态错误,内容如下:

KUBELET_EXTRA_ARGS="--fail-swap-on=false"

待配置文件修改完成后, 需要设定kubelet服务开机自动启动,这也是kubeadm的强制要求

systemctl enable kubelet

2.4 初始化master节点(master节点进行此操作)

kubeadm init \
--apiserver-advertise-address=0.0.0.0 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.14.2 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
# --apiserver-advertise-address : API server 通告给其他组件的IP地址,一般应该为Master节点的IP 地址,0.0.0.0表示节点上所有可用的地址
# -–kubernetes-version选项的版本号用于指定要部署的Kubenretes程序版本,它需要与当前的kubeadm支持的版本保持一致;
# --image-repository选项,指定初始化需要的镜像源从阿里云镜像仓库拉取。
# --pod-network-cidr选项用于指定分Pod分配使用的网络地址,它通常应该与要部署使用的网络插件(例如flannel、calico等)的默认设定保持一致,10.244.0.0/16是flannel默认使用的网络;
#--service-cidr用于指定为Service分配使用的网络地址,它由kubernetes管理,默认即为10.96.0.0/12;
#--ignore-preflight-errors=Swap 仅应该在未禁用Swap设备的状态下使用。        

镜像比较大,可能会拉取一段时间,可以提前把镜像缓存下来(可选操作)

kubeadm config images pull

在命令kubuadm init 命令执行结束会返回以下内容

顺序执行上图黑色标粗的命令

mkdir ~/.kube    #创建.kube目录,把配置信息放到此目录下
cp /etc/kubernetes/admin.conf ~/.kube/config
chown $(id -u):$(id - g) $HOME/.kube/config

通过kubectl进行客户端命令测试,并借此了解集群组件的当前状态:

kubectl get componentstatus
#如下内容表明master节点部署成功
#NAME                 STATUS      MESSAGE       ERROR
#controller-manager   Healthy     ok
#scheduler            Healthy     ok                                                                                          
#etcd-0               Healthy     {"health":"true"}      

部署网络插件

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#验证
kubectl get pods -n kube-system -l app=flannel
#NAME                          READY   STATUS    RESTARTS   AGE
#kube-flannel-ds-amd64-wscnz   1/1     Running   0          14m

2.5 添加节点到集群中(node节点执行)

node01节点和node02节点都执行此命令

kubeadm join 172.20.0.71:6443 –token gwxgdg.igg5728t1vt8ahhx –discovery-token-ca-cert-hash sha256:9b63cd1530b50da4733d2e7dace9270782211e25ec2e4bbac395e59adc56a26c

2.6 验证

kubectl get nodes

    NAME                  STATUS   ROLES    AGE     VERSION

    master01.magedu.com   Ready    master   31m     v1.12.1

    node01.magedu.com     Ready    <none>   3m8s    v1.12.1

    node02.magedu.com     Ready    <none>   2m25s   v1.12.1

注意:以上步骤如不特殊标明,master和node节点都要配置

至此整个的集群部署结束,在你的操作过程中可能会遇到文档以外的各种问题,在你查找解决办法时你已经成长

推荐

如何查看docker与kubernetes版本之间对应关系

如何删除集群中node节点

kubeadm init 忘了怎么办

感谢

本文参考马哥的kubernetes进阶实战

与很多大佬博客

发布了40 篇原创文章 · 获赞 59 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_44208042/article/details/90670008