首页 > 其他分享 >K8S集群搭建

K8S集群搭建

时间:2023-10-23 11:35:29浏览次数:45  
标签:kubernetes -- token 集群 dashboard kubeadm K8S 节点 搭建

集群搭建的几种方式

  • kubeadm
    • 通过kubeadm init、kubeadm join快速部署集群。
  • 二进制包
    • 下载官方编译好的二进制文件,手动部署,比较麻烦。。
  • 第三方工具、web端
    • 第三方提供的部署工具、web部署端。

kubeadm部署k8s集群

实验环境

master节点:

IP:10.0.1.140

worker节点1:

IP:10.0.1.141

worker节点2:

IP:10.0.1.142

安装步骤

概览

  1. 安装部署docker
  2. 使用kubeadm init创建master节点
  3. 使用kubeadm join将worker节点加入到master。
  4. 部署容器网络(CNI,如:flannel、calico)
  5. 部署web管理端(kube dashboard)

安装docker

参考:Docker的安装、镜像加速配置

安装前配置

# 关闭防火墙
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>

# 在各个节点添加hosts记录
cat >> /etc/hosts << EOF
10.0.1.140 k8s-master
10.0.1.141 k8s-node1
10.0.1.142 k8s-node2
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 ntp1.aliyun.com

安装K8S(所有节点都要操作)

# 添加k8s软件源
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

# 安装k8s 1.23版本
yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
yum install -y kubelet-1.24.1 kubeadm-1.24.1 kubectl-1.24.1
# 设置kublet开机启动,现不需要start kubelet
systemctl enable kubelet

创建master节点

kubeadm init \
  --apiserver-advertise-address=10.0.1.140 \
  --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
  
kubeadm init \
  --apiserver-advertise-address=192.168.2.6 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.24.1 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
  --ignore-preflight-errors=all \
  --cri-socket=unix:///var/run/containerd/containerd.sock
  
•--apiserver-advertise-address 集群通告地址(也就是master节点的IP地址)
•--image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
•--kubernetes-version K8s版本,与上面安装的一致
•--service-cidr 集群内部虚拟网络,Pod统一访问入口
•--pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致

初始化完成后,最后会输出一个join命令,先记住,下面用。

kubeadm join 10.0.1.140:6443 --token pre4w5.zfg39sf9u40q0ljj --discovery-token-ca-cert-hash sha256:ac3fb8317af17eea3587598002f87cd69f59d702a6f6a89aaca13207206bf16d

kubeadm join 192.168.2.6:6443 --token fjeeyj.ko5lirl38zzd51qj \
        --discovery-token-ca-cert-hash sha256:87b5968fe9f578f88f7536345512033278c4230b92ed620466a3a8d05ceb351 \
         --ignore-preflight-errors=all
        
默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,可以直接使用命令快捷生成:
kubeadm token create --print-join-command


# 根据提示复制配置文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

将worker节点加入master节点

在所有的工作节点输入刚刚master节点生成的加入命令,如:

kubeadm join 10.0.1.140:6443 --token pre4w5.zfg39sf9u40q0ljj --discovery-token-ca-cert-hash sha256:ac3fb8317af17eea3587598002f87cd69f59d702a6f6a89aaca13207206bf16d

如果提示错误(特别是多次执行kubeadm join),可以使用尝试下面方法解决:

# 方法一,重置kubeadm
kubeadm reset

# 方法二:
在命令后添加 --ignore-preflight-errors=all  # 错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。

# 方法三
执行的时候接版本 比如--v=5 或者--v=更高的版本


部署容器网络(CNI,calico)

master操作即可。

下载yaml文件

wget https://docs.projectcalico.org/manifests/calico.yaml

编辑yaml文件,开启CALICO_IPV4POOL_CIDR属性,并将值设定为刚刚master节点init中的--pod-network-cidr值:创建master节点

4550             # no effect. This should fall within `--cluster-cidr`.
4551             - name: CALICO_IPV4POOL_CIDR
4552               value: "10.244.0.0/16"
4553             # Disable file logging so `kubectl logs` works.

开始部署calico:

kubectl apply -f calico.yaml
kubectl get pods -n kube-system

部署web管理端(k8s dashboard)

Dashboard是官方提供的一个UI,可用于基本管理K8s资源。

下载yaml:

https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml

默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部

vi recommended.yaml
...
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001
  selector:
    k8s-app: kubernetes-dashboard
  type: NodePort
...

部署dashboard:

kubectl apply -f recommended.yaml
kubectl get pods -n kubernetes-dashboard

访问dashboard:

访问地址:https://NodeIP:30001

# 记住是工作节点的IP
如:https://10.0.1.140:30001


创建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写入到kubeconfig文件中,这样可以导出kubeconfig,用kubeconf登录dashboard,否则每次都要用token登录。
kubectl config set-credentials kubernetes-admin --token=上一步的token

标签:kubernetes,--,token,集群,dashboard,kubeadm,K8S,节点,搭建
From: https://www.cnblogs.com/juelian/p/17782025.html

相关文章

  • 掌握 Kubernetes 故障排除:有效维护集群的最佳实践和工具
    Kubernetes是一款管理容器化应用程序的强大工具。然而,与任何复杂的系统一样,使用它时也可能出错。当问题出现时,掌握有效的故障排除技术和工具非常重要。 本文将介绍以下步骤,助您了解事件收集的入门知识:检索最新事件使用Pod模拟问题在位于PV的Pod中存储事件 检索......
  • 掌握 Kubernetes 故障排除:有效维护集群的最佳实践和工具
    Kubernetes是一款管理容器化应用程序的强大工具。然而,与任何复杂的系统一样,使用它时也可能出错。当问题出现时,掌握有效的故障排除技术和工具非常重要。 本文将介绍以下步骤,助您了解事件收集的入门知识:检索最新事件使用Pod模拟问题在位于PV的Pod中存储事件 检索......
  • 从零用VitePress搭建博客教程(6) -– 第三方组件库的使用和VitePress搭建组件库文档
    接上一节:从零用VitePress搭建博客教程(5)-如何自定义页面模板、给页面添加独有的className和使页面标题变成侧边目录?九、第三方组件库的使用我们经常看见UI组件库的文档,这里我们就用element-plus第三方组件库为例子,搭建组件库文档examples:作为组件库示例目录,我们以Button组件......
  • ServerLess学习笔记-Fnproject搭建
    ServerLess学习笔记-搭建FnProject介绍官方文档:https://fnproject.io/tutorials/Fn是一个事件驱动的开源功能即服务FaaS计算平台,您可以在任何地方运行,它的一些主要特点开源原生Docker:使用任何Docker容器作为你的函数支持所有语言随处运行公有云、私有云和混合云......
  • ServerLess学习笔记-搭建FN示例
    ServerLess学习笔记-搭建FnProject示例初始化函数目录#初始化fn_demo1[root@VM-24-9-centosserverless]#fninit--runtimepythonfn_demo1Creatingfunctionat:./fn_demo1UnabletogetlatestFDKversion,usingdefaultFunctionboilerplategenerated.func.yam......
  • 两台实体机器4个虚拟机节点的Hadoop集群搭建(Ubuntu版)
    安装UbuntuLinux元信息两台机器,每台机器两台UbuntuUbuntu版本:ubuntu-22.04.3-desktop-amd64.iso处理器数量2,每个处理器的核心数量2,总处理器核心数量4单个虚拟机内存8192MB(8G),最大磁盘大小30G参考链接清华大学开源软件镜像站https://mirrors.tuna.tsinghua.edu.cn/ubunt......
  • k8s-命名空间namespace
    查看namespace:kubectlgetnamespaces#namespaces可以简写为namespace或ns创建namespace:kubectlcreatenamespace命名空间名称kubectlcreatenamespacenamespace1删除namespace:kubectldeletenamespace命名空间名称kubectldeletenamespacenamespace1可以通过......
  • k8s-pod
    Pod是Kubernetes最小的管理单位,一个Pod可以封装一个容器或多个容器一个Pod里的多个容器可以共享存储和网络,可以看作一个逻辑的主机获取pod帮助方法:kubectlexplainpod查看pod信息:kubectlgetpod-nnamespace-owide查看pod的yaml文件:kubectlgetpodpod名-nnam......
  • k8s-节点标签label
    查看节点标签信息:kubectlgetnode--show-labels设置节点标签信息:kubectllabelnode节点名标签值kubectllabelnodenode2region=huanaizone=Aenv=testbussiness=game显示节点的相应用标签:kubectlgetnodes-Lregion,zone修改节点标签信息:kubectllabelnode......
  • k8s网络-service
    k8s网络Kubernetes本身并不负责网络通信,Kubernetes提供了容器网络接口CNI(ContainerNetworkInterface),具体的网络通信交给CNI插件来负责,开源的CNI插件非常多,像Flannel、Calico。Kubernetes虽然不负责网络,但要求集群中的Pod能够互相通信,且Pod必须通过非NAT网络连接,即收到的数据包......