在网上找了很多,也看了很多教程,都不够尽善尽美,决定自己记录下自己的部署过程,希望对大家有所帮助
一、系统环境及部署准备
1.1 相关组件与主机环境
- 操作系统:centos7.4
- docker版本:18.09.0
- kubernetes版本:1.14
- 各主机详细信息如下:
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节点都要配置
至此整个的集群部署结束,在你的操作过程中可能会遇到文档以外的各种问题,在你查找解决办法时你已经成长
推荐
感谢:
本文参考马哥的kubernetes进阶实战
与很多大佬博客