安装标准或规范
在部署Kubernetes集群的机器之前,需遵循以下前提条件:
多台设备上运行的 CentOS7.x-86_x64 操作系统。硬件配置要求为:支持至少 2GB RAM 和 2 个及以上 CPU 核心,并配备至少 30GB 硬盘空间。该系统支持远程接入互联网服务,并提供镜像文件下载功能。若服务器无法联网,则需自行下载镜像文件并配置相关节点。此外还移除 swap 分区以避免潜在的问题。
搭建硬件平台并配置开发环境
| 角色 | IP | 主机名 |
|---|---|---|
| 服务名称master | IP地址172.16.3.181 | 主节点K8smaster |
| 工作节点node1 | IP地址172.16.3.182 | 主节点K8snode |
| 工作节点node2 | IP地址9000 | 主节点K8snode |
硬件性能需满足高性能计算的要求;软件开发环境需安装必要开发工具;系统资源占用需符合合理限制;建议选择64位操作系统;内存占用需至少4GB;存储空间建议至少80GB;硬件架构应支持多线程处理;建议设置如下:MOD compensation参数设置为0;注:以上配置仅供参考,请根据具体项目需求进行调整
注意:以上配置仅供参考,请根据具体项目需求进行调整
# 关闭防火墙
[root@localhost ~]# firewall-cmd --state #查看防火墙状态
[root@localhost ~]# systemctl stop firewalld
# 停止防火墙的服务
[root@localhost ~]# systemctl disable firewalld # 禁止开机启动
# 关闭selinux
[root@localhost ~]# setenforce 0 # 临时(当前不用重启)
[root@localhost ~]# sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久(重启后生效)
[root@localhost ~]# sestatus -v # 查看状态(需要重启生效)
# 关闭swap
[root@localhost ~]# swapoff -a # 临时
[root@localhost ~]# sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
# 根据规划设置主机名
[root@localhost ~]# hostnamectl set-hostname k8smaster #其它的服务器为 k8snode1,k8snode2
# 在master添加hosts
[root@localhost ~]# cat >> /etc/hosts << EOF 172.16.3.181 k8smaster
172.16.3.182 k8snode1
172.16.3.183 k8snode2
EOF
# 将桥接的IPv4流量传递到iptables的链(三台都执行)
[root@localhost ~]# cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
[root@localhost ~]# sysctl --system # 生效
# 时间同步
[root@localhost ~]# yum install ntpdate -y
[root@localhost ~]# ntpdate time.windows.com
所有节点配置 Docker、Kubeadm 和 Kubelet 软件包
Kubernetes的预设容器运行时设置为Docker, 因此建议先安装Docker的安装程序
[root@localhost ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
[root@localhost ~]# yum -y install docker-ce-19.03.11
[root@localhost ~]# systemctl enable docker && systemctl start docker
[root@localhost ~]# docker --version
[root@localhost ~]# cat > /etc/docker/daemon.json << EOF { "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"] } EOF
[root@localhost ~]# 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
因 versions 更新频率较高,在此处明确指定 versions 进行部署
[root@localhost ~]# yum install -y kubelet-1.18.19 kubeadm-1.18.19 kubectl-1.18.19 [root@localhost ~]# systemctl enable kubelet
配置主节点初始化流程以实现Kubernetes Master的部署
该系统将在IP地址172.16.3.181172.16.3.181上运行(Master节点)。
[root@localhost ~]# kubeadm init \
--apiserver-advertise-address=172.16.3.181 \
--image-repository registry.aliyuncs.com/google\_containers \
--kubernetes-version v1.18.19 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
说明:
–apiserver-advertise-address=172.16.3.181 #master的ip地址
–image-repository registry.aliyuncs.com/google_containers #指定从什么位置拉取镜像
–kubernetes-version=v1.18.19 #指定k8s版本,根据具体版本进行修改
–service-cidr=10.96.0.0/16 #指定service网络的范围
–pod-network-cidr=10.244.0.0/16 #指定pod网络的范围
因为默认获取镜像位置k8s.gcr.io在国内不可用的缘故,在此将镜像位置指定为阿里云镜像仓库地址。
请调用kubectl系统以实现资源调度目标
[root@k8smaster ~]# mkdir -p $HOME/.kube
[root@k8smaster ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8smaster ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
[root@k8smaster ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8smaster NotReady master 5m40s v1.18.19 [root@k8smaster ~]#
集成 K8S 节点
为集群新增节点,并运行由kubeadm init生成的kubeadm join指令。
为集群新增节点,并运行由kubeadm init生成的kubeadm join指令。
[root@k8snode2 ~]# kubeadm join 172.16.3.181:6443
--token jvv3up.7oy3647hgiozpoh7 \
--discovery-token-ca-cert-hash
sha256:962693618045022ac50317a00397e917dc5881ccb1152d53b586907ccc179724
默认情况下,token的有效时长设定为24小时。一旦超过期限,则该token将失效不再使用。此时需要重新生成并激活新的token。具体操作步骤如下:
1. 首先应确认当前token是否已经超过期限。
2. 如果发现该token已失效,则需按照如下步骤进行处理:1. 退出现有登录状态;
2. 启动新设备安装程序;
3. 输入设备序列号;
4. 进行设备认证测试;
5. 最后将生成新的Token并完成激活流程。
[root@k8snode2 ~]# kubeadm token create --print-join-command

再次在 Mater 中运行,会在其中发现 node 已经集成进来。
当前状态设置为NotReady,并且必须安装CNI插件
配置CNI网络插件
[root@k8smaster ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#查看 pods 情况
[root@k8smaster ~]# kubectl get pods -n kube-system
#查看 nodes 情况
[root@k8smaster ~]# kubectl get nodes
如果使用kubectl apply -f命令后无法将地址下拉,则可以通过以下步骤解决:首先确保网络连接正常;其次将该文件单独下载至本地存储空间中;最后再利用kubectl apply命令将其应用到目标位置。
在 Kubernetes 集群环境中部署一个 pod 实例,并对其实现稳定的服务状态进行检查
# 拉一个 Nginx 下来,便于测试用
[root@k8smaster ~]# kubectl create deployment nginx --image=nginx
# 查看状态
[root@k8smaster ~]# kubectl get pod
# 对外暴露 80 端口
[root@k8smaster ~]# kubectl expose deployment nginx --port=80 --type=NodePort
#
$ kubectl get pod,svc
请访问以下路径:http://NodeIP:Port