前言
前面使用二进制搭建了k8s,较为繁琐,本篇博客将介绍使用kubeadm搭建k8s以及部署Harbor私服。
一、部署步骤
在所有节点上安装Docker和kubeadm
部署Kubernetes Master
部署容器网络插件
部署 Kubernetes Node,将节点加入Kubernetes集群中
部署 Dashboard Web 页面,可视化查看Kubernetes资源
部署 Harbor 私有仓库,存放镜像资源
二、实验环境
服务器类型 |
IP地址 | 安装组件 |
master(2C/4G,cpu核心数要求大于2) | 192.168.109.131 | docker、kubeadm、kubelet、kubectl、flannel |
node01(2C/2G) | 192.168.109.132 | docker、kubeadm、kubelet、kubectl、flannel |
node02(2C/2G) | 192.168.109.133 | docker、kubeadm、kubelet、kubectl、flannel |
Harbor节点(hub.stevelu.com) | 192.168.109.133 | docker、kubeadm、kubelet、kubectl、flannel |
环境准备(所有节点执行)
#所有节点,关闭防火墙规则,关闭selinux,关闭swap交换 systemctl stop firewalld systemctl disable firewalld setenforce 0 iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X swapoff -a #交换分区必须要关闭 sed -ri 's/.*swap.*/#&/' /etc/fstab #永久关闭swap分区,&符号在sed命令中代表上次匹配的结果
#加载 ip_vs 模块 for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done
#修改主机名 hostnamectl set-hostname master01 hostnamectl set-hostname node01 hostnamectl set-hostname node02 hostnamectl set-hostname hub.stevelu.com
#所有节点修改hosts文件 vim /etc/hosts 192.168.109.131 master01 192.168.109.132 node01 192.168.109.133 node02 192.168.109.136 hub.stevelu.com
#调整内核参数 cat > /etc/sysctl.d/kubernetes.conf << EOF #开启网桥模式,可将网桥的流量传递给iptables链 net.bridge.bridge-nf-call-ip6tables=1 net.bridge.bridge-nf-call-iptables=1 #关闭ipv6协议 net.ipv6.conf.all.disable_ipv6=1 net.ipv4.ip_forward=1 EOF #加载参数 sysctl --system
三、所有节点安装docker
yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install -y docker-ce docker-ce-cli containerd.io mkdir /etc/docker cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" } } EOF #使用Systemd管理的Cgroup来进行资源控制与管理,因为相对Cgroupfs而言,Systemd限制CPU、内存等资源更加简单和成熟稳定。 #日志使用json-file格式类型存储,大小为100M,保存在/var/log/containers目录下,方便ELK等日志系统收集和管理日志。 systemctl daemon-reload systemctl restart docker.service systemctl enable docker.service docker info | grep "Cgroup Driver" Cgroup Driver: systemd
四、master及node节点安装kubeadm,kubelet和kubectl
#定义kubernetes源 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=0 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF yum install -y kubelet-1.20.11 kubeadm-1.20.11 kubectl-1.20.11 #开机自启kubelet systemctl enable kubelet.service #K8S通过kubeadm安装出来以后都是以Pod方式存在,即底层是以容器方式运行,所以kubelet必须设置开机自启