哈喽~大家好呀,欢迎大家来到 Kubernetes 篇(k8s篇)文章系列的第二篇——kubeadm创建集群,我们来一起看看吧。
🥇个人主页:个人主页
🥈 系列专栏:【云原生系列】
🥉与这篇相关的文章:
2.1 Kubernetes基础概念 【云原生】2.1 Kubernetes基础概念_程序猿追的博客-CSDN博客 1.5 Docker 进阶实战 【云原生】1.5 Docker 进阶实战_程序猿追的博客-CSDN博客_idea 链接docker 1.4 Docker 常用命令实战(下) 【云原生】1.4 Docker 常用命令实战(下)_程序猿追的博客-CSDN博客
目录
一、前言
🎡我们有三台机器(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 里面输入密钥,我们就可以访问了。
(求关注)持续更新中……