虚拟机搭建搭建Kubernetes集群
- 环境
- 虚拟机搭建
- 配置网络
- 使用MobaXterm连接虚拟机
- 配置yum源
- 关闭防火墙
- 关闭Swap
- 关闭 selinux:
- 将桥接的 IPv4 流量传递到 iptables 的链
- 时间同步
- 安装Docker
- 添加阿里云 YUM 软件源
- 安装 kubeadm,kubelet 和 kubectl
- 克隆虚拟机
- 修改node1,node2的IP地址
- 设置主机名
- 在 master 添加 hosts
- 部署 Kubernetes Master
- 加入 Kubernetes Node
- 部署CNI网络插件
- 测试 kubernetes 集群
环境
Windows10 64位,
vmware workstation pro 16、
CentOS-7-x86_64-Everything-2009.iso
虚拟机搭建
我是官网下载vmware workstation pro 16,然后可以淘宝购买激活码或者网上搜
安装好之后,创建虚拟机
配置网络
1 激活虚拟机网卡
系统安装后,此时如果主机是通过路由器自动获取IP地址上网的,那么虚拟机由于选择了NAT模式,应该也是可以联外网的。但是,由于没有将虚拟机的网卡激活,此时可能无法联网。因此需要先编辑ifcfg-ens33文件(名称可能根据不同的机器会有变化)激活网卡:
vi /etc/sysconfig/network-scripts/ifcfg-ens33
Centos7 虚拟机新安装后是不能使用vim 可以用vi,不能使用ifconfig ,可以使用ip addr
将ONBOOT=no
改为 ONBOOT=yes
保存退出,然后执行命令 service network restart
重启网络服务
2 配置静态IP
以上我们已经动态获取了虚拟机的IP,但动态IP可能会随着虚拟机的重启而发生变化,特别是存在多台虚拟机都动态获取IP时,不太利于我们的开发和测试,因此,统一配置静态IP是有必要的。
第一步:设置VMware虚拟机的网关。
第二步:配置虚拟机网卡文件ifcfg-ens33。
vi /etc/sysconfig/network-scripts/ifcfg-ens33
修改完成保存,然后执行命令 service network restart
重启网络服务。
使用MobaXterm连接虚拟机
vmware虚拟机开启之后,直接在vmware操作虚拟机很不方便,不能粘贴复制,显示也很不友好,所以后续用MobaXterm操作虚拟机
配置yum源
不建议使用CentOS 7 自带的yum源,因为安装软件和依赖时会非常慢甚至超时失败。这里,我们使用阿里云的源予以替换,执行如下命令,替换文件/etc/yum.repos.d/CentOS-Base.repo:
yum install wget
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum makecache
关闭防火墙
防火墙一定要提前关闭,否则在后续安装K8S集群的时候是个trouble maker。执行下面语句关闭,并禁用开机启动:
systemctl stop firewalld & systemctl disable firewalld
关闭Swap
类似ElasticSearch集群,在安装K8S集群时,Linux的Swap内存交换机制是一定要关闭的,否则会因为内存交换而影响性能以及稳定性。这里,我们可以提前进行设置:执行 swapoff -a可临时关闭,但系统重启后恢复。用vim编辑/etc/fstab,即:
vim /etc/fstab
注释掉包含swap的那一行即可,重启后可永久关闭,如下所示:
关闭 selinux:
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时
将桥接的 IPv4 流量传递到 iptables 的链
$ cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
$ sysctl --system # 生效
时间同步
$ yum install ntpdate -y
$ ntpdate time.windows.com
安装Docker
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce
systemctl enable docker && systemctl start docker
docker --version
添加阿里云 YUM 软件源
设置仓库地址,改完之后重启docker
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF
systemctl restart docker
添加 yum 源
$ 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
安装 kubeadm,kubelet 和 kubectl
$ yum install -y kubelet kubeadm kubectl
$ systemctl enable kubelet
以上,基本完成了虚拟机的配置。
克隆虚拟机
修改node1,node2的IP地址
方法同master 的修改,记得修改之后,重启 service network restart
设置主机名
在三台机器分别执行
hostnamectl set-hostname k8smaster
hostnamectl set-hostname k8snode1
hostnamectl set-hostname k8snode2
在 master 添加 hosts
$ cat >> /etc/hosts << EOF
192.168.32.100 k8smaster
192.168.32.101 k8snode1
192.168.32.102 k8snode2
EOF
部署 Kubernetes Master
service-cidr,pod-network-cidr 。没有特别要求,跟现有的不冲突就行
要求安装指定版本,可以添加–kubernetes-version v1.18.0
kubeadm init --apiserver-advertise-address=192.168.32.100 --image-repository registry.aliyuncs.com/google_containers --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16
完成之后,可以执行docker images
查看master中拉取的镜像,也就是master中包含的组件
注意下面这几句话
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
查看节点
kubectl get nodes
root用户可选择性执行下面一条语句
export KUBECONFIG=/etc/kubernetes/admin.conf
加入 Kubernetes Node
(1)在 192.168.32.101/102(Node)执行
向集群添加新节点,执行在 kubeadm init 输出的 kubeadm join 命令:
kubeadm join 192.168.32.100:6443 --token aamnjs.egp079egfdks65p8 --discovery-token-ca-cert-hash sha256:19c6a0f8e4d1dca5d2b5fc2020c050201d6685bb5d6c658ff7203fe0e70e55e8
部署CNI网络插件
master 上执行
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
如果连不上
可以在/etc/hosts
文件添加一条
199.232.68.133 raw.githubusercontent.com
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
会返回下面的信息
需要多等一会,使用下面的命令
kubectl get pods -n kube-system
直到结果的STATUS全部为running
执行可以看到node节点全部ready
kubectl get nodes
报错kube-flannel-ds-gsqwl Init:ImagePullBackOff
的解决
查看报错原因
kubectl describe pod kube-flannel-ds-amd64-s6gpb -n kube-system
如果是因为拉取镜像失败。可以采取手动拉取镜像的方式
我遇到的是node2机器无法拉取镜像,但是node1和master已经拉取完毕
直接把node1的镜像打包,然后发到node2 直接load
docker save quay.io/coreos/flannel:v0.13.1-rc2 -o flannel.tar
scp flannel.tar root@192.168.32.102:/root/
docker load -i flannel.tar
测试 kubernetes 集群
在 Kubernetes 集群中创建一个 pod,验证是否正常运行:
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc
访问地址:http://NodeIP:Port(http://192.168.32.100:31897/)