虚拟机搭建搭建Kubernetes集群

虚拟机搭建搭建Kubernetes集群

环境

Windows10 64位,
vmware workstation pro 16、
CentOS-7-x86_64-Everything-2009.iso

虚拟机搭建

我是官网下载vmware workstation pro 16,然后可以淘宝购买激活码或者网上搜
安装好之后,创建虚拟机
虚拟机搭建搭建Kubernetes集群
虚拟机搭建搭建Kubernetes集群
虚拟机搭建搭建Kubernetes集群
虚拟机搭建搭建Kubernetes集群
虚拟机搭建搭建Kubernetes集群
虚拟机搭建搭建Kubernetes集群
虚拟机搭建搭建Kubernetes集群
虚拟机搭建搭建Kubernetes集群
虚拟机搭建搭建Kubernetes集群
虚拟机搭建搭建Kubernetes集群
虚拟机搭建搭建Kubernetes集群
虚拟机搭建搭建Kubernetes集群
虚拟机搭建搭建Kubernetes集群
虚拟机搭建搭建Kubernetes集群

配置网络

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虚拟机的网关。
虚拟机搭建搭建Kubernetes集群
虚拟机搭建搭建Kubernetes集群
虚拟机搭建搭建Kubernetes集群
虚拟机搭建搭建Kubernetes集群
第二步:配置虚拟机网卡文件ifcfg-ens33。

vi /etc/sysconfig/network-scripts/ifcfg-ens33

虚拟机搭建搭建Kubernetes集群修改完成保存,然后执行命令 service network restart重启网络服务。

使用MobaXterm连接虚拟机

vmware虚拟机开启之后,直接在vmware操作虚拟机很不方便,不能粘贴复制,显示也很不友好,所以后续用MobaXterm操作虚拟机
虚拟机搭建搭建Kubernetes集群
虚拟机搭建搭建Kubernetes集群

配置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

以上,基本完成了虚拟机的配置。

克隆虚拟机

虚拟机搭建搭建Kubernetes集群
虚拟机搭建搭建Kubernetes集群
虚拟机搭建搭建Kubernetes集群
虚拟机搭建搭建Kubernetes集群
虚拟机搭建搭建Kubernetes集群
虚拟机搭建搭建Kubernetes集群
虚拟机搭建搭建Kubernetes集群

修改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中包含的组件
注意下面这几句话
虚拟机搭建搭建Kubernetes集群

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

会返回下面的信息
虚拟机搭建搭建Kubernetes集群
需要多等一会,使用下面的命令

kubectl get pods -n kube-system

直到结果的STATUS全部为running
虚拟机搭建搭建Kubernetes集群
执行可以看到node节点全部ready

 kubectl get nodes

虚拟机搭建搭建Kubernetes集群

报错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

虚拟机搭建搭建Kubernetes集群
虚拟机搭建搭建Kubernetes集群

访问地址:http://NodeIP:Port(http://192.168.32.100:31897/)
虚拟机搭建搭建Kubernetes集群

上一篇:Kubernetes 网络模型与网络策略


下一篇:K8S-01