步骤0:虚拟环境设置

预先需要的环境:首先创建2个虚机超简版,虚机是centos7,网络是net,1cpu,2g内存,30g磁盘

开始搭建:
我们使用的命令没有权限,因此先给用户赋权:
使用xshell连接虚拟机操作更加方便:

步骤1:配置源,配置虚机系统内容,安装基本docker环境

第一部分:

1.配置阿里yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

2.这里会发现报错:也就是没有权限
admin is not in the sudoers file. This incident will be reported

3.配置用户权限:

k8s部署hadoop单节点 k8s搭建hadoop集群_运维


4.再次执行1,然后执行:

yum makecache 提示:Metadata Cache Created 表示完成第一部分

第二部分:

1.关闭防火墙:防火墙如果不提前关闭,接下来搭建集群会产生各种毛病
执行:sudo systemctl stop firewalld && sudo systemctl disable firewalld

提示:systemctl stop firewalld则完成第二部分

2.关闭swap,Linux的Swap内存交换机制会在内存不足的时候使用磁盘扩展内存的存储,因此会产生严重的性能下降,需提前关闭,否则会因为内存交换而影响性能以及稳定性。

  1. 执行swapoff -a可临时关闭,但系统重启后恢复
  2. 编辑/etc/fstab,注释掉包含swap的那一行即可,重启后(reboot)可永久关闭,如下图:
  3. 或直接执行:sudo sed '/ swap / s/^/#/ /etc/fstab(和上面其实是一个意思)

    关闭前:

    关闭后:

    这里,关闭交换区部分完毕
    注:后面我们知道,我们还需要关闭iptable,因此这也可以直接在这里先处理

第三部分

修改本地的dns信息

查看本地ip,进而获取对应的本地(ifcnf-ens33)文件是哪个:

k8s部署hadoop单节点 k8s搭建hadoop集群_k8s部署hadoop单节点_02


k8s部署hadoop单节点 k8s搭建hadoop集群_linux_03


网管查询:

k8s部署hadoop单节点 k8s搭建hadoop集群_kubernetes_04


完成后就可以获取了。

第四部分

安装docker
1.阿里云的Docker仓库
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum makecache 但是安装时报错,提示没有:yum-config-manager
这个命令在yum-utils 包里,可以通过先安装yum-utils ,执行:
sudo yum -y install yum-utils

2.安装docker社区版

sudo yum install docker-ce -y

添加aliyundocker仓库加速器
由于cgroupfs”作为Docker cgroup驱动程序。 而推荐的驱动程序是“systemd”,也添加一下:

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://fl791z1h.mirror.aliyuncs.com"],
   "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
EOF

3.提示安装完毕后,执行docker version查看版本并确认真正完成安装

k8s部署hadoop单节点 k8s搭建hadoop集群_docker_05


看到上面显示:Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 需要执行下面命令:

sudo systemctl daemon-reload

sudo systemctl restart docker.service

4.启动docker 并设置开机自动启动:
sudo systemctl start docker & systemctl enable docker

5.运行,验证是否完成
docker run hello-world

问题:我们发现,每次执行docker都需要sudo,这是因为当前用户没有加入到docker用户组中。

# 查看组
[admin@localhost ~]$ groups
admin
# 将admin加入到docker组
[admin@localhost ~]$ sudo usermod -aG docker admin
#重新登陆当前admin用户
[admin@localhost ~]$ su - admin
Password: 
Last login: Wed May  6 17:19:02 CST 2020 from 192.168.235.1 on pts/0
# 验证是否成功
[admin@localhost ~]$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[admin@localhost ~]$

至此,步骤1结束。

步骤2:搭建一主一从k8s集群

第一部分

添加阿里k8s源:

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[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

第二部分

关闭SeLinux
SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)
由于管理着资源权限,因此我们初学直接关闭,防止接下来莫名的问题,不知道从何查起。
执行:sudo setenforce 0

第三部分

配置主机名:
我们现在有2台虚机,一主一从。
查看IP:
主:192.168.235.133
从:192.168.235.129
修改主机名:
编辑 /etc/hostname,将hostname修改为k8s-node1(重启生效)
设定主机hosts:
编辑 /etc/hosts,追加内容 ip k8s-node?
(所有节点都需要添加ip和hostname:192.168.235.129 k8s-node2192.168.235.133 k8s-node2 从节点内容编辑为:192.168.235.129 k8s-node1)
这样,主节点就可以直接通过k8s-node2访问ip为192.168.235.129的从节点,反之亦然。

第四部分

配置内核参数,将桥接的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 vim bash-completion net-tools gcc -y

第六部分

安装k8s三件套:kubelet、kubeadm、kubectl 执行:

yum install -y kubelet kubeadm kubectl

k8s部署hadoop单节点 k8s搭建hadoop集群_linux_06


完成安装

第七部分

配置kubelet的cgroup drive,需要确保docker 的cgroup drive 和kubelet的cgroup drive一样
但是我这里找不到该文件,我直接跳过:cat: /etc/systemd/system/kubelet.service.d/10-kubeadm.conf: No such file or directory

第八部分

启动kubelet
systemctl enable kubelet && systemctl start kubelet

第九部分

下载K8S的Docker镜像
需要合理上网,当然还有其它方法,下载别人在墙内的资源,然后用脚本导入也行,问题就是安装的东西版本不是最新的,或者指定阿里源。
初始化集群,只在主节点先初始化:

kubeadm init --kubernetes-version=1.18.0  --apiserver-advertise-address=192.168.122.21   --image-repository registry.aliyuncs.com/google_containers  --service-cidr=10.10.0.0/16 --pod-network-cidr=10.122.0.0/16

POD的网段为: 10.122.0.0/16, api server地址就是master本机IP。

这一步很关键,由于kubeadm 默认从官网k8s.grc.io下载所需镜像,国内无法访问,因此需要通过–image-repository指定阿里云镜像仓库地址。

k8s部署hadoop单节点 k8s搭建hadoop集群_kubernetes_07


如上图,完成,最后会返回一句话,用来将其他节点加入:

kubeadm join 192.168.235.132:6443 --token e2wn2a.ns6czdzz5xp2e0hg --discovery-token-ca-cert-hash sha256:289cccfb2142f52b3f5ca67a2d624f3c6c3b3ff6fb9388334598842dc2261275

结束,执行 docker images检查一下镜像是否已经存在

k8s部署hadoop单节点 k8s搭建hadoop集群_linux_08


这样我们就完成了一台虚机的k8s安装工作,所有文件都已经安装在一台机器上面,因此可以通过直接复制这个虚机就可以得到一个一模一样的另外一台虚机,之前的安装都不需要再做一遍了。当然,作为一个小白,我建议,大家再从头来一遍,对于安装操作这种工作就是一句话:无他,唯手熟尔!!!

执行join in 将其他node节点加入到集群:

第十部分

根据提示创建kubectl

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

执行下面命令,使kubectl可以自动补充
source <(kubectl completion bash) 查看节点,pod

kubectl get node
kubectl get pod --all-namespaces

输出结果:
node节点为NotReady,因为corednspod没有启动,缺少网络pod

第十一部分

安装calico网络

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

k8s部署hadoop单节点 k8s搭建hadoop集群_linux_09


安装完毕,再查看pod和node

kubectl get pod -n kube-system
kubectl get node

k8s部署hadoop单节点 k8s搭建hadoop集群_运维_10

第十二部分

由于我们只有一主一从,K8S集群默认不会将Pod调度到Master上,这样Master的资源就浪费了。

在Master(即k8s-node1)上,可以运行以下命令使其作为一个工作节点:

kubectl taint nodes --all node-role.kubernetes.io/master-

k8s部署hadoop单节点 k8s搭建hadoop集群_运维_11


完成,接下来就把其他节点加进来就ok了。