主机 | IP | 系统 |
---|---|---|
master | 192.168.2.15 | ubuntu20.04 x64 2C 4G |
Worker1 | 192.168.2.16 | ubuntu20.04 x64 2C 4G |
Worker1 | 192.168.2.18 | ubuntu20.04 x64 2C 4G |
使用 iterm2 连接四台服务器 command + shift + i 同时操作
-
初始化配置
关闭防火墙
systemctl stop firewalld systemctl disable firewalld
关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久 setenforce 0 # 临时
关闭swap
swapoff -a # 临时 sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
根据规划分别设置主机名
hostnamectl set-hostname <hostname> master1、worker1、worker2
在master添加hosts
cat >> /etc/hosts << EOF 192.168.2.15 k8s-master1 192.168.2.18 k8s-worker1 192.168.2.16 k8s-worker2 > EOF
将桥接的 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 ntpdate -y ntpdate time.windows.com
-
所有节点安装 Docker
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo yum -y install docker-ce # 设置开机自启并重启 systemctl enable docker && systemctl start docker
-
配置镜像下载加速器
vim /etc/docker/daemon.json # 添加 { "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"] } systemctl restart docker docker info #查看docker信息,进行确认 # 添加软件源: 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:
yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0 systemctl enable kubelet
-
部署 k8s-master【master执行】
kubeadm 部署(需要等上一会),需要在两个 master 上分别执行,apiserver 分别指定自身 IP kubeadm init \ --apiserver-advertise-address=192.168.2.15 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.23.0 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16 \ --ignore-preflight-errors=all # 解释 --apiserver-advertise-address 集群通告地址 --image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问 --kubernetes-version K8s版本,与上面安装的一致 --service-cidr 集群内部虚拟网络,Pod统一访问入口 --pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致 # 初始化之后,会输出一个join命令,先复制出来,node节点加入master会使用 kubeadm join 192.168.2.15:6443 --token uyx18p.o5yd0n88fd3rny6i \ --discovery-token-ca-cert-hash sha256:5db69227ff23b9073e74d7aa244fa04f9b42aa6c512220612e9bfca1e93fb6d9
-
拷贝 k8s 认证文件
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config # 查看工作节点: kubectl get nodes
注:由于网络插件还没有部署,还没有准备就绪 NotReady,继续操作
-
配置 k8s 的 node 节点【node节点操作】
在 node 节点执行加入命令,执行后在 master 可以看到新增节点
默认 token 有效期为 24 小时,当过期之后,该 token 就不可用了。这时就需要重新创建 token,可以直接使用命令快捷生成:
kubeadm token create --print-join-command
-
部署 CNI 网络插件
在上述操作完成后,各个工作节点已经加入了集群,但是它们的状态都是 NoReady,这是由于无它们无法跨主机通信的原因。而 CNI 网络插件的主要功能就是实现 pod 资源能够跨宿主机进行通信。在master节点中执行以下命令进行配置:
wget https://docs.projectcalico.org/manifests/calico.yaml
下载完后还需要修改里面定义 Pod 网络(CALICO_IPV4POOL_CIDR),取消注释,value 与前面 kubeadm init 的 --pod-network-cidr 指定的一样
# 修改完后文件后,进行部署: kubectl apply -f calico.yaml kubectl get pods -n kube-system #执行结束要等上一会才全部running
注:以后所有 yaml 文件都只在 Master 节点执行。
安装目录:/etc/kubernetes/
组件配置文件目录:/etc/kubernetes/manifests/
-
部署 Dashboard
Dashboard 是官方提供的一个 UI,可用于基本管理 K8s 资源。
YAML下载地址:
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml
默认 Dashboard 只能集群内部访问,修改 Service 为 NodePort 类型,暴露到外部:
使用命令判断启动状态
kubectl get pods --all-namespaces kubectl get pods -n kubernetes-dashboard
浏览器访问:https://NodeIP:30001
报错解决:Dashboard 证书不信任,浏览器无法访问
1、删除默认的secret,用自签证书创建新的secret kubectl delete secret kubernetes-dashboard-certs -n kubernetes-dashboard kubectl create secret generic kubernetes-dashboard-certs --from-file=/etc/kubernetes/pki/apiserver.key --from-file=/etc/kubernetes/pki/apiserver.crt -n kubernetes-dashboard 2、修改dashboard.yaml文件,在args下面增加如下两行 args: - --auto-generate-certificates - --tls-key-file=apiserver.key - --tls-cert-file=apiserver.crt 3、重新应用yaml即可 kubectl apply -f kubernetes-dashboard.yaml 说明:新版本镜像2.0.3及以上已解决证书信任问题,可任意浏览器访问
-
创建 service account 并绑定默认 cluster-admin 管理员集群角色:
创建用户
kubectl create serviceaccount dashboard-admin -n kube-system
用户授权
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
获取用户 Token
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
使用创建的 token 登录 dashboard