哈喽~大家好呀,欢迎大家来到 Kubernetes 篇(k8s篇)文章系列的第二篇——kubeadm创建集群,我们来一起看看吧。
一、前言
🎡我们有三台机器(node1节点,node2节点,node3节点)
所以我们的第一步就是把三台机器全部装好 docker(这里可以参照之前的文章),这里建议批量输入进行操作。
二、安装kubeadm
🍿安装要求:
- 一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令
- 每台机器 2 GB 或更多的 RAM (如果少于这个数字将会影响你应用的运行内存)
- 2 CPU 核或更多
- 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)
- 设置防火墙放行规则
- 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。请参见这里了解更多详细信息。
- 设置不同hostname
- 开启机器上的某些端口。请参见这里 了解更多详细信息。
- 内网互信
- 禁用交换分区。为了保证 kubelet 正常工作,你 必须 禁用交换分区。
- 永久关闭
2.1 安装基础环境
🎀第一步我们要设置各个机器自己的域名
hostnamectl set-hostname xxxx
🎀第二步将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo setenforce 0 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
🎀第三步关闭swap
swapoff -a sed -ri 's/.*swap.*/#&/' /etc/fstab
🎀第四步允许 iptables 检查桥接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf br_netfilter EOF cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF
🎀第五步我们让以上的配置生效
sudo sysctl --system
2.2 安装kubelet、kubeadm、kubectl
🎡 我们这里需要安装三大这个组件。
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg exclude=kubelet kubeadm kubectl EOF
🎡输入命令,让它自己慢慢下
sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes
我们让所有的机器启动 kubelet
sudo systemctl enable --now kubelet
三、使用kubeadm引导集群
3.1 下载各个机器需要的镜像
sudo tee ./images.sh <<-'EOF' #!/bin/bash images=( kube-apiserver:v1.20.9 kube-proxy:v1.20.9 kube-controller-manager:v1.20.9 kube-scheduler:v1.20.9 coredns:1.7.0 etcd:3.4.13-0 pause:3.2 ) for imageName in ${images[@]} ; do docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName done EOF
给脚本加个权限
chmod +x ./images.sh && ./images.sh
🎡接下来的一步很关键,我们要设置主节点
注:所有机器添加master域名映射,以下需要修改为自己的
echo "172.31.0.4 cluster-endpoint" >> /etc/hosts
🎡接下来主节点初始化(--apiserver-advertise-address= + 主机号)
kubeadm init \ --apiserver-advertise-address=172.31.0.4 \ --control-plane-endpoint=cluster-endpoint \ --image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \ --kubernetes-version v1.20.9 \ --service-cidr=10.96.0.0/16 \ --pod-network-cidr=192.168.0.0/16
🎡如果你看到这个那么恭喜你,安装成功了
3.2 安装网络组件
curl https://docs.projectcalico.org/manifests/calico.yaml -O kubectl apply -f calico.yaml
3.3 加入node节点
kubeadm join cluster-endpoint:6443 --token x5g4uy.wpjjdbgra92s25pp \ --discovery-token-ca-cert-hash sha256:6255797916eaee52bf9dda9429db616fcd828436708345a308f4b917d3457a22
3.4 验证集群
- 验证集群节点状态
- kubectl get nodes
3.5 部署dashboard
🎡到这里我们一直用的是命令行,感觉很枯燥无味,这里我们来一个可视化界面——dashboard。
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
如果命令没有用,我们就直接将https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
复制到浏览器的地址栏中,直接复制代码,粘贴
注:将 type: ClusterIP 改为 type: NodePort
设置访问端口
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
🎡 找到端口,在安全组放行
kubectl get svc -A |grep kubernetes-dashboard
🎡这是我们可以看到我们的安全端口
在浏览器输入https://139.198.165.238:32759,就能访问登入界面了
格式:https://集群任意IP:端口
🎡这是我们需要令牌,准备一个文件——vi dash.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 dash.yaml
令牌访问
#获取访问令牌 kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
🎡 复制选中的部分,这就是我们的密钥。
然后在 Kubeconfig 里面输入密钥,我们就可以访问了。