1、搭建K8S环境平台规划
2、服务器硬件配置要求
测试环境配置要求
节点 | CPU内核数 | 内存大小 | 硬盘大小 |
master | 2核及以上 | 4G及以上 | 20GB及以上 |
node | 4核及以上 | 8G及以上 | 40GB及以上 |
生产环境配置要求
配置要求更高。
3、搭建k8s集群部署方式
(1)kubeadm
是一个K8S部署工具,提供kubeadm init 和 kubeadm join,用于快速部署K8S集群。
参考链接:使用 kubeadm 引导集群 | Kubernetes
(2)二进制包
4、kubeadm方式部署——系统初始化操作
kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具,这个工具能通过两条指令完成一个kubernetes集群的部署:
第一、创建一个 Master 节点 kubeadm init
第二、将 Node 节点加入到当前集群中 kubeadm join <Master节点的IP和端口>
环境要求
工作节点 | 主机名 | IP地址 | 系统版本 | 内存 | CPU | 磁盘 |
master | k8s-master | 192.168.200.31 | CentOS 7.9 | 2GB | 2核 | 30GB |
node1 | k8s-node1 | 192.168.200.32 | CentOS 7.9 | 8GB | 2核 | 30GB |
node2 | k8s-node2 | 192.168.200.33 | CentOS 7.9 | 8GB | 2核 | 30GB |
- 准备CentOS 7.9镜像安装三台虚拟机
- 硬件配置要求如上
- 三台虚拟机能够相互访问
- 虚拟机可以访问外网,拉去镜像
- 禁止swap分区
安装前准备工作
1、修改主机名 hostnamectl set-hostname k8s-master 2、添加主机名 cat >> /etc/hosts << EOF 192.168.200.31 k8s-master 192.168.200.32 k8s-node1 192.168.200.33 k8s-node2 EOF 3、关闭防火墙 systemctl stop firewalld && systemctl disable firewalld systemctl status firewalld 4、关闭selinux # 临时允许 setenforce 0 getenforce # 永久允许 sed -i "s/SELINUX=enforcing/SELINUX=permissive/g" /etc/selinux/config cat /etc/selinux/config 5、关闭swap分区 # 参考链接:https://www.cnblogs.com/architectforest/p/12982886.html # 查看swapoff的版本 swapoff --version # 临时关闭❎ swapoff -a # 永久关闭❎ sed -ri 's/.*swap.*/#&/' /etc/fstab # 重启生效 # 使用swapon检查 swapon -v #输出为空,表示swap已关闭 # 使用free命令检查 free -m # 重新启动swap分区 swapon -a 6、配置网卡联网 cat /etc/sysconfig/network-scripts/ifcfg-ens32 7、配置阿里云镜像 cd /etc/yum.repos.d/ && mkdir bak && mv CentOS-* bak/ curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo 8、生成本地缓存 yum makecache fast 9、更新YUM源软件包 yum update -y 10、将桥接的 IPv4 流量传递到 iptables 的链 cat >> /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF # cat /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 [root@k8s-master ~]# 11、设置主机之间时间同步 yum install -y ntpdate ntpdate time.windows.com
5、kubeadm方式部署——部署master节点
1️⃣所有节点安装Docker
#yum安装gcc相关环境(需要确保虚拟机可以上外网。) yum install -y gcc && yum install -y gcc-c++ 1、卸载旧版本docker yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine 2、安装需要的依赖包 yum install -y yum-utils 3、设置阿里云docker镜像 yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo # 默认镜像源是国外的,不推荐使用 yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 推荐使用国内镜像 4、安装docker docker-ce ee企业版 yum install -y docker-ce docker-ce-cli containerd.io 5、启动Docker systemctl start docker && systemctl enable docker && systemctl status docker 6、查看docker版本信息 docker version
2️⃣所有节点配置阿里云Docker、kubernetes镜像
7、配置阿里云docker镜像加速 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://w2kavmmf.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload && systemctl restart docker 8、配置阿里云Kubernetes 镜像 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=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
3️⃣所有节点安装kubelet kubeadm kubectl
# 指定K8S版本安装,不指定版本默认安装最新版。 yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0 systemctl enable kubelet
4️⃣部署Kubernetes Master节点
这里指定阿里云镜像仓库地址,默认的镜像地址无法加载访问。
kubeadm init \ --apiserver-advertise-address=192.168.200.31 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.18.0 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16
要开始使用集群,需要以普通用户的身份运行以下命令:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config [root@k8s-master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master NotReady master 6m8s v1.18.0 [root@k8s-master ~]#
6、kubeadm方式部署——部署node节点
5️⃣将 Node节点 加入到Kubernetes Master节点
在Node端执行操作。
加入任何数量的工作节点,通过运行以下每一个根节点:
kubeadm join 192.168.200.31:6443 --token 3myqeb.35plbttpfc0tjlvz \ --discovery-token-ca-cert-hash sha256:b8378ad91dc3c88577869edd53937f0be1851ae972035b8449e4eae875ef2542 # 集群状态为NotReady,需要添加CNI网络插件 [root@k8s-master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master NotReady master 12m v1.18.0 k8s-node01 NotReady <none> 116s v1.18.0 k8s-node02 NotReady <none> 5s v1.18.0 # 查看kubernetes版本 [root@k8s-master ~]# kubectl version Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.0", GitCommit:"9e991415386e4cf155a24b1da15becaa390438d8", GitTreeState:"clean", BuildDate:"2020-03-25T14:58:59Z", GoVersion:"go1.13.8", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.0", GitCommit:"9e991415386e4cf155a24b1da15becaa390438d8", GitTreeState:"clean", BuildDate:"2020-03-25T14:50:46Z", GoVersion:"go1.13.8", Compiler:"gc", Platform:"linux/amd64"}
默认token有效期为24小时,过期后,该token不能使用,需要重新创建token,命令如下:
kubeadm token create --print-join-command
6️⃣部署CNI网络插件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flan
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml [root@k8s-master ~]# kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE coredns-7ff77c879f-9wt65 1/1 Running 0 26m coredns-7ff77c879f-vf892 1/1 Running 0 26m etcd-k8s-master 1/1 Running 0 26m kube-apiserver-k8s-master 1/1 Running 0 26m kube-controller-manager-k8s-master 1/1 Running 0 26m kube-flannel-ds-65b8n 1/1 Running 0 4m22s kube-flannel-ds-nx6gj 1/1 Running 0 4m22s kube-flannel-ds-r6f25 1/1 Running 0 4m22s kube-proxy-9mvdl 1/1 Running 0 26m kube-proxy-pwd2b 1/1 Running 0 14m kube-proxy-zslgz 1/1 Running 0 16m kube-scheduler-k8s-master 1/1 Running 0 26m
查看集群节点状态是Ready
[root@k8s-master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master Ready master 28m v1.18.0 k8s-node01 Ready <none> 18m v1.18.0 k8s-node02 Ready <none> 16m v1.18.0
7️⃣测试kubernetes集群
在Kubernetes集群中创建一个pod,验证是否正常运行:
# 拉取nginx镜像 kubectl create deployment nginx --image=nginx # nginx启动完成 # kubectl get pod NAME READY STATUS RESTARTS AGE nginx-f89759699-r6j49 1/1 Running 0 88s # 暴露nginx端口80 kubectl expose deployment nginx --port=80 --type=NodePort # 查看暴露端口信息 # kubectl get pod,svc NAME READY STATUS RESTARTS AGE pod/nginx-f89759699-r6j49 1/1 Running 0 3m6s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 37m service/nginx NodePort 10.101.19.205 <none> 80:31814/TCP 26s
访问地址:http://NodeIP:Port