部署目标
1. 在所有节点上安装 Docker 和 Kubeadm
2. 部署 Kubernates Master
环境准备
- 两台虚拟机 Centos7.x-86_64
- 硬件配置: RAM >= 2GB, CPU >= 2,硬盘 >= 30GB
- 虚拟机可以访问外网,并且网络可以互相连通
- 禁止 swap 分区
安装步骤
Virtualbox 安装 CentOS
网上基于 VirtualBox 安装 Centos 的教材有很多,这里不再过多赘述,这里仅记录下如何配置虚拟机双网卡, 实现固定IP, 且能访问外网的方法。
设置网卡1为: 仅主机host-only
设置网卡2为: 网络转换地址 NAT
查看虚拟机网络,并记住 IP地址网段, 在宿主机执行命令。如下图:
重启虚拟机设置静态IP地址,编辑网络配置文件, 执行:
>> vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
修改文件内容为如下:
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
#BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s3
UUID=08012b4a-d6b1-41d9-a34d-e0f52a123e7a
DEVICE=enp0s3
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.刚才虚拟机的网段.你想要的IP (如: 192.168.56.10)
修改完毕后重启虚拟机网络服务
>> systemctl restart network
查看对应网卡的ip
>> ip addr |grep 192
此时虚拟机既可以访问外网,也能和宿主机进行通信。
配置虚拟机并安装 kubeadm,kubelet and kubectl
1. 安装基本软件包
>> yum install wget net‐tools vim bash‐comp* ‐y
2. 配置虚拟机 yum 源, iptables
删除原有源
>> rm -f /etc/yum.repos.d/*
重新下载阿里云源
>> wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
列出 yum 各软件包
>> yum list
清除缓存
>> yum clean all
3. 设置主机名称
>> hostnamectl set‐hostname master
重新登陆虚拟机
4. 配置 Master 节点
执行
>> vim /etc/hosts
新增内容(注意替换IP地址为自己的)
192.168.56.10 master
192.168.56.11 node1
关闭防火墙
>> systemctl stop firewalld
>> systemctl disable firewalld
关闭 SeLinux
>> setenforce 0
>> sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
关闭 Swap
>> swapoff -a
>> yes | cp /etc/fstab /etc/fstab_bak
>> cat /etc/fstab_bak |grep -v swap > /etc/fstab
5. 配置Docker,k8s的阿里云源(源地址可能过时,注意替换)
>> cat >>/etc/yum.repos.d/kubernetes.repo <
执行
>> wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
>> yum clean all
>> yum repolist
6. 安装并启动Docker
>> yum install -y docker-ce.x86_64 docker-ce-cli.x86_64 containerd.io.x86_64
配置 Docker 加速镜像
>> mkdir /etc/docker
>> cat > /etc/docker/daemon.json <
镜像地址可以访问 这个网址 免费获取一个,上面的可能已经过时无法使用
执行
>> vi /usr/lib/systemd/system/docker.service
找到指定位置并修改内容为,不要全部替换!
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd
重启 Docker
>> systemctl daemon-reload
>> systemctl enable docker
>> systemctl restart docker
7. 安装 kubeadm,kubelet,kubectl
卸载旧版本
yum remove -y kubelet kubeadm kubectl
安装
yum install -y kubelet-1.19.3 kubeadm-1.19.3 kubectl-1.19.3
重启 Docker,kubelet
systemctl enable kubelet && systemctl start kubelet
这里可以对系统打一个备份, 以后方便复用
初始化 Master 节点
1. 将桥接的 IPV4 流量传递到 iptables 链
>> echo "1" >/proc/sys/net/ipv4/ip_forward
>> echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables
修改配置
>> vi /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
3. 初始化主节点
>> kubeadm init --kubernetes-version=1.19.3 \
--apiserver-advertise-address=替换为当前虚拟机的ip(如: 192.168.56.10) \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
执行
>> mkdir -p $HOME/.kube
>> sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
>> sudo chown $(id -u):$(id -g) $HOME/.kube/config
4. 安装网络插件
>> kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
这里如果执行失败可以将网址里的内容保存到本地文件内再执行
执行
>> kubectl get node
若出现下图所示, 则说明 Master 节点配置成功
初始化 Node 节点
1. 配置网络信息
将刚才的主节点备份复制一份为Node节点, 如上修改网络配置文件中的 IP 地址为对应的节点IP(如:192.168.56.11)。
2. 加入集群
默认的 token 的有效期为 24 小时,当过期之后,该 token 就不可用了, 执行如下命令重新生成 token(需要在master端执行):
>> kubeadm token create --print-join-command
复制生成的命令在Node节点中执行, 如下:
>> kubeadm join 192.168.99.101:6443 --token vrqf1w.dyg1wru7nz0ut9jz --discovery-token-ca-cert-hash sha256:1832d6d6c8386de5ecb1a7f512cfdef27a6d14ef901ffbe7d3c01d999d794f90
3. 将 master 节点的 admin.conf 拷贝到 node 节点中
在 master 节点中执行
>> scp /etc/kubernetes/admin.conf root@node1:/etc/kubernetes/
4. 配置 Kubeconfig 环境变量
>> echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
>> source ~/.bash_profile
5. 安装 flannel 网络插件
>> kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
这里如果执行失败可以将网址里的内容保存到本地文件内再执行
6. 将 master 节点下的 /etc/cni/net.d/ 下的所有文件拷贝到 node 节点上
在 node 节点执行
>> mkdir -p /etc/cni/net.d/
在 master 上执行
>> scp /etc/cni/net.d/* root@node1:/etc/cni/net.d/
7. 验证node 与 master 节点状态
分别在 node 与 master 上执行
>> kubectl get nodes
若出现如下所示, 则 kubernetes 部署成功
小结
安装过程可能会遇到一些未知的问题,要耐心一些,大不了重头再来一遍!