-
K8S环境搭建平台规划
- 单master集群
- 我的理解就类似与微服务中的单注册中心
- 多master集群
- 我的理解就类似与微服务中的多注册中心
- 单master集群
-
部署前置要求
-
一台Linux 主机
-
每台机器 2 GB 或更多的 RAM
-
集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)
-
节点之中不可以有重复的主机名、MAC 地址或 product_uuid。请参见了解更多详细信息
- 你可以使用命令
ip link
或ifconfig -a
来获取网络接口的 MAC 地址 - 可以使用
cat /sys/class/dmi/id/product_uuid
命令对 product_uuid 校验
- 你可以使用命令
-
开启机器上的某些端口
-
master所需端口
协议 方向 端口范围 作用 使用者 TCP 入站 6443 Kubernetes API 服务器 所有组件 TCP 入站 2379-2380 etcd 服务器客户端 API kube-apiserver, etcd TCP 入站 10250 Kubelet API kubelet 自身、控制平面组件 TCP 入站 10251 kube-scheduler kube-scheduler 自身 TCP 入站 10252 kube-controller-manager kube-controller-manager 自身 -
node 所需端口
协议 方向 端口范围 作用 使用者 TCP 入站 10250 Kubelet API kubelet 自身、控制平面组件 TCP 入站 30000-32767 NodePort 服务† 所有组件
-
-
禁用交换分区。为了保证 kubelet 正常工作,你 必须 禁用交换分区
-
临时禁用交换分区
swapoff -a #禁止命令
-
永久禁用交换分区
- 把根目录文件系统设为可读写
mount -n -o remount,rw /
- 编辑
/etc/fstab
, 在swap分区这行前加 # 禁用掉,例如
# # /etc/fstab # Created by anaconda on Thu Apr 15 19:10:57 2021 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/centos-root / xfs defaults 0 0 UUID=31abd679-6c80-4940-bde6-83a2afe8db30 /boot xfs defaults 0 0 /dev/mapper/centos-home /home xfs defaults 0 0 # /dev/mapper/centos-swap swap swap defaults 0 0
-
重启服务器
reboot
-
-
-
部署方式
- kubeadm
- 快速部署,方便
- 二进制包
- 需要手动部署,比较麻烦
- kubeadm
-
kubeadm方式部署(例子为Debian系统)
-
安装 runtime
- 我这里安装的runtime为Docker,Dockera安装参考Docker安装指南
-
安装使用 Kubernetes
apt
仓库所需要的包apt-get update apt-get install -y apt-transport-https ca-certificates curl
-
下载 Google Cloud 公开签名秘钥,我这里用的阿里镜像的签名秘钥
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
-
添加 Kubernetes
apt
仓库echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main " | tee /etc/apt/sources.list.d/kubernetes.list
-
更新
apt
包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本apt-get update apt-get install -y kubelet kubeadm kubectl
-
截止今天为止,最新版的Kubernetes版本为1.21而阿里云的镜像未同步到1.21,这里只好把Kubernetes版本降到1.20
apt-get update apt-get install -y kubelet=1.20.6-00 kubeadm=1.20.6-00 kubectl=1.20.6-00
-
创建master节点
kubeadm init --apiserver-advertise-address=172.10.162.204 --image-repository registry.aliyuncs.com/google_containers --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16 # 如果只有1核CPU还是想启动,通过一下命令启动 kubeadm init --ignore-preflight-errors=NumCPU
- image-repository 镜像,由于K8S官方镜像被屏蔽,这里只能使用阿里云的镜像
- apiserver-advertise-address 当前节点的IP
- service-cidr 为服务的虚拟 IP 地址另外指定 IP 地址段
- pod-network-cidr 指明 pod 网络可以使用的 IP 地址段,只要与当前IP不冲突即可
这样系统就启动成功了
- 使用kubectl工具
mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config
-
查看当前node节点
kubectl get nodes
-
-
在另外的在 另一主机中创建node节点
kubeadm join 172.10.162.169:6443 --token rjgg42.rpkcfh9smxep80tt \ --discovery-token-ca-cert-hash sha256:d0a72213de0a0376e75e319fa9f6890e06b11d1c3983e59b3025fab139abc0e6
master 节点默认不能运行 pod,如果用
kubeadm
部署一个单节点集群,默认情况下无法使用,请执行以下命令解除限制$ kubectl taint nodes --all node-role.kubernetes.io/master- # 恢复默认值 # $ kubectl taint nodes NODE_NAME node-role.kubernetes.io/master=true:NoSchedule
默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作如下:
kubeadm token create --print-join-command
可以在master主机输入
kubectl get nodes
看到master 节点和 node 节点都部署好了
-
由于未部署 CNI 插件,CoreDNS 未正常启动,这里写一下如何部署 CNI网络插件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Github容易日常抽风,这里可以使用我自己创建的镜像来设置
kubectl apply -f http://obs.guiyunweb.com/kube-flannel.yml
# 查看状态 kubectl get pods -n kube-system # 查看节点状态 kubectl get nodes
-
测试kubernetes集群
我们都知道K8S是容器化技术,它可以联网去下载镜像,用容器的方式进行启动
在Kubernetes集群中创建一个pod,验证是否正常运行
# 下载nginx 拉取nginx镜像 kubectl create deployment nginx --image=nginx # 拉起完查看一下状态
如果我们出现Running状态的时候,表示已经成功运行了
下面就需要将端口暴露出去,让其它外界能够访问
# 暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看一下对外的端口
kubectl get pod,svc
这里可以访问到nginx集群了