1.实验环境准备
准备三台centos7虚拟机,用来部署k8s集群:
master(hadoop1,192.168.229.111)配置:
操作系统:centos7.3以及更高版本都可以配置:4核cpu,4G内存,30G硬盘
网络:网络地址转换
node(hadoop2,192.168.229.112)配置:
操作系统:centos7.3以及更高版本都可以配置:4核cpu,4G内存,30G硬盘
网络:网络地址转换
2.初始化实验环境(所有节点)
2.1 配置静态IP
#查看网络信息
#配置静态IP
#重启网络服务
systemctl start network.service或者service network restart
#重启虚拟机
2.2 修改yum源
#yum在线下载wget
yum -y install wget
#备份原有yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
#下载阿里云yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#生成新的yum缓存
yum makecache fast
#配置k8s需要的yum源
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
EOF
#清理缓存
yum clean all
#生成新的yum缓存
yum makecache fast
#更新yum源
yum -y update
#安装软件依赖包
yum -y install yum-utils device-mapper-persistent-data lvm2
备注:yum-utils是yum的安装工具包,可以简化安装过程中设置安装源的配置过程。docker内部容器如果需要进行数据存储,需要通过device-mapper-persistent-data和lvm2数据存储驱动来完成数据存储。
#添加新的docker软件源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum clean all
yum makecache fast
2.3 安装基础软件包
yum -y install wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate
2.4 关闭防火墙
#查看防火墙状态
systemctl status firewalld
#停止并禁用防火墙
systemctl stop firewalld && systemctl disable firewalld
2.5 时钟同步
#查看时间类型
在hadoop1节点上输入date命令,可以查看到当前系统时间如下所示。
如果结果中系统时间为HKT(即香港时间),可以把时间改为CST(CST表示中部标准时间,即上海时间)。
#修改时间类型
使用shanghai时间来覆盖当前的系统默认时间,具体操作如下所示。
注意:上述操作在集群各个节点都要执行,保证当前系统时间标准为上海时间。
#配置 NTP 服务器
我们选择hadoop1节点来配置 NTP 服务器,集群其他节点定时同步hadoop1节点时间即可。
(1)检查 NTP 服务是否已经安装。
输入rpm -qa | grep ntp命令查看NTP服务是否安装,操作结果如下所示。
[root@hadoop1 ~]# rpm -qa | grep ntp
ntp-4.2.6p5-12.el6.centos.2.x86_64
ntpdate-4.2.6p5-12.el6.centos.2.x86_64
如果NTP服务已经安装,可以直接进行下一步,否则输入yum install -y ntp命令可以在线安装NTP服务。实际上就是安装两个软件, ntpdate-4.2.6p5-12.el6.centos.2.x86_64是用来和某台服务器进行同步的,ntp-4.2.6p5-12.el6.centos.2.x86_64ntp-4.2.6p5-1.el6.centos.x86_64 是用来提供时间同步服务的。
(2)修改配置文件ntp.conf
修改NTP服务配置,具体操作如下所示。
[root@hadoop1 ~]# vi /etc/ntp.conf
#启用 restrict限定该机器网段,192.168.229.111为当前节点的IP地址
restrict 192.168.229.111 mask 255.255.255.0 nomodify notrap
#注释掉 server 域名配置
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
#添加如下两行配置,让本机和本地硬件时间同步
server 127.127.1.0
fudge 127.127.1.0 stratum 10
(3)启动NTP服务
执行chkconfig ntpd on命令,可以保证每次机器启动时,NTP服务都会自动启动,具体操作如下所示。
[root@hadoop1 ~]# chkconfig ntpd on
(4)配置其他节点定时同步时间
hadoop2节点通过Linux crontab 命令,可以定时同步hadoop1节点的系统时间,具体操作如下所示。
[root@hadoop2 ~]# crontab -e
#表示每个10分钟进行一次时钟同步
0-59/10 * * * * /usr/sbin/ntpdate hadoop1
备注:hadoop2节点也需要使用yum install -y ntp命令安装NTP服务,才能使用ntpdate时间同步命令。
2.6 关闭selinux
#关闭selinux
vi /etc/sysconfig/selinux
#重启虚拟机
reboot
#查看配置结果
getenforce
2.7 关闭交换分区
#设置开机自动关闭分区
swapoff -a
#设置永久禁用分区,打开/etc/fstab文件注释掉带有swap
sed -i 's/.*swap.*/#&/' /etc/fstab
2.8 修改内核参数
#开启网络参数
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
#手动加载所有的配置文件
sysctl --system
2.9 修改主机名
#通过/etc/hostname文件修改节点主机名
vi /etc/hostname
hadoop1
2.10 配置hosts文件
[root@hadoop1 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.229.111 hadoop1
192.168.229.112 hadoop2
2.11 ssh免密登录
1.在root用户下,配置节点本身ssh免密
#生成密钥对
ssh-keygen -t rsa
#将公钥文件id_rsa.pub 中的内容拷贝到相同目录下的authorized_keys文件中
cd .ssh/
cp id_rsa.pub authorized_keys
#为.ssh目录及文件赋予相应的权限
cd ..
chmod 700 .ssh
chmod 600 .ssh/*
#ssh免密登录
ssh hadoop1
2.实现集群节点间ssh免密登录
#将hadoop2的公钥id_ras.pub复制到hadoo01中的authorized_keys文件中
cat ~/.ssh/id_rsa.pub | ssh root@hadoop1 'cat >> ~/.ssh/authorized_keys'
#将hadoop1中的authorized_keys文件分发到hadoop2节点
scp -r ~/.ssh/authorized_keys root@hadoop2:~/.ssh/
#hadoop1 ssh免密登录hadoop2
ssh hadoop2
3.docker安装部署(所有节点)
3.1 查看支持哪些docker版本
yum list docker-ce --showduplicates |sort -r
3.2 安装docker社区版
yum -y install docker-ce-20.10.7-3.el7
3.3 设置开机启动docker
systemctl enable docker && systemctl start docker
3.4 查看docker运行状态
systemctl status docker
3.5 修改docker配置
#设置更多镜像地址
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://7mimmp7p.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
],
"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.6 重启docker
systemctl daemon-reload && systemctl restart docker
3.7 配置k8s网络
#配置网络
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 >/proc/sys/net/bridge/bridge-nf-call-ip6tables
echo """
vm.swappiness = 0
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
""" > /etc/sysctl.conf
#加载配置
sysctl -p
3.8 开启ipvs
#不开启ipvs将会使用iptables,但是效率低,所以官网推荐需要开通ipvs内核
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack"
for kernel_module in \${ipvs_modules}; do
/sbin/modinfo -F filename \${kernel_module} > /dev/null 2>&1
if [ $? -eq 0 ]; then
/sbin/modprobe \${kernel_module}
fi
done
EOF
#修改执行权限并执行
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs
3.9 安装cri-docker
Docker通过cri-docker软件与k8s进行整合。
#下载cri-docker
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.2.6/cri-dockerd-0.2.6-3.el7.x86_64.rpm
#安装cri-docker
rpm -ivh cri-dockerd-0.2.6-3.el7.x86_64.rpm
#重载沙箱(pause)镜像
vi /usr/lib/systemd/system/cri-docker.service
ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.8 --container-runtime-endpoint fd://
#启动并设置开机重启cri-docker
systemctl start cri-docker
systemctl enable cri-docker
4.k8s安装部署(所有节点)
4.1 安装kubectl、kubelet、kubeadm组件
#指定版本下载
yum install -y kubelet-1.25.0 kubeadm-1.25.0 kubectl-1.25.0
4.2 启动kubelet并设置为开机启动
systemctl enable kubelet
systemctl start kubelet
4.3 主节点部署k8s master(仅主节点)
#初始化k8s集群(cpu核必须大于1)
kubeadm init \
--apiserver-advertise-address=192.168.229.111 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.25.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--cri-socket unix:///var/run/cri-dockerd.sock
# 对于root用户, 直接添加变量即可开始使用集群
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
4.4 加入k8s集群(仅从节点)
# 这段话是在主节点kubeadm init时复制过来的, 注意添加--cri-socket
kubeadm join 192.168.229.111:6443 --token q1asjl.zb0ihzewm7ilx895 \
--discovery-token-ca-cert-hash sha256:8b30a783d6398b178a8c241380bc63ac4b728730d9f344fc1ebee8d61900fadf \
--cri-socket unix:///var/run/cri-dockerd.sock
#查看k8s集群节点
kubectl get nodes
#查看系统默认pods
kubectl get pods -n kube-system
4.5 安装网络插件calico
Calico网络插件可以实现跨主机间容器通信
# 下载 Pod 网络插件(CNI)
wget https://docs.projectcalico.org/manifests/calico.yaml --no-check-certificate
#下载calico镜像压缩包,收到上传至每台主机
calico~kube~controllers~v3.24.3.tar.gz
calico~cni~v3.24.3.tar.gz
calico~node~v3.24.3.tar.gz
备注:calico插件下载经常失败,加微信提供网盘下载链接。
#每个节点手动通过docker离线加载镜像
docker load -i calico~cni~v3.24.3.tar.gz
docker load -i calico~kube~controllers~v3.24.3.tar.gz
docker load -i calico~node~v3.24.3.tar.gz
#查看calico是否安装成功
docker images | grep calico
#在master节点执行命令进行calico插件安装
kubectl apply -f calico.yaml
4.6 查看节点状况
#在主节点执行命令看集群是否成功
kubectl get node -o wide
备注:如果status列中的状态都为ready,表明集群安装成功。
5.部署Dashboard(仅主节点)
5.1 部署Dashboard
#部署 Dashboard UI
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
#设置访问端口,找到 type: ClusterIP 改为 type: NodePort
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
#查看端口
kubectl get svc -A |grep kubernetes-dashboard
#访问:https://集群任意IP:端口 进入登录界面
https://192.168.229.111:30178
5.2 创建访问账号
# 准备一个yaml文件
vi dashuser.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
#创建访问账号
kubectl apply -f dashuser.yaml
5.3 令牌访问
# 获取访问令牌
kubectl -n kubernetes-dashboard create token admin-user
# 现在复制令牌并将其粘贴到登录屏幕上的Enter令牌字段中
5.4 登录成功
#看到如下界面说明Dashboard部署成功
6.测试k8s集群(仅主节点)
# 创建Nginx容器
kubectl create deployment nginx --image=nginx
#暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
查看pod
kubectl get pod,svc
# 访问地址(http://NodeIP:Port)
http://192.168.229.111:30985/
重要!重要!重要!添加下方二维码获取相关资料。