如何快速搭建Kubernetes实验环境?

如何快速搭建Kubernetes实验环境?

作者: 运维研习社 2021-07-16 09:51:21

云计算 如果kubelet本身就是运行在一个容器里,那么直接操作宿主机就会变的很麻烦,所以为了解决这个问题,kubeadm选择直接将kubelet部署在宿主机上,然后使用容器部署其他组件。

[[411640]]

很多小伙伴想学kubernetes,都会遇到这些问题

  • 手里没有可用的服务器
  • 打开kubernetes官方文档,看到复杂的组件学不下去

今天就介绍一种省钱省时的方式来玩kubernetes

准备服务器

很多小伙伴电脑配置比较高,可以直接用虚拟机开两台机器,至少得确保自己的电脑16G内存以上

我一个穷鬼,用着8G内存小本,没办法,我选择云服务器

在阿里云平台充值100块,选择按量付费,每小时3毛钱的2c4G突发性能实例,玩一晚上也就一罐红牛的价格

服务器开好就可以开始部署kubernetes了,本文采用kubeadm方式快速搭建kubernetes集群

修改系统参数

  • 加载br_netfilter模块
  1. 查看是否加载br_netfilter 
  2. lsmod | grep br_netfilter 
  3. 加载br_netfilter 
  4. modprobe br_netfilter 
  5. 或者修改module-load文件 
  6. cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf 
  7. br_netfilter 
  8. EOF 
  • 开启iptables检查桥接流量
  1. cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf 
  2. net.bridge.bridge-nf-call-ip6tables = 1 
  3. net.bridge.bridge-nf-call-iptables = 1 
  4. EOF 
  5. sudo sysctl --system 
  • 关闭swap
  1. swapoff -a 
  • 关闭防火墙及selinux
  1. systemctl stop firewalld && systemctl disable firewalld 
  2. setenforce 0 
  3. sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config 
  • 设置主机名
  1. master: hostnamectl set-hostname k8s-master 
  2. node: hostnamectl set-hostname k8s-node01 
  • 添加host
  1. cat >> /etc/hosts << EOF 
  2. 192.168.4.34 k8s-master 
  3. 192.168.4.35 k8s-node01 
  4. EOF 
  • 设置时钟同步,用ntpdate或chronyd
  1. yum -y install epel-release chrony && systemctl enable chronyd && systemctl start chronyd 

安装docker

  1. # 配置docker-ce的yum源 
  2. wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo 
  3. # 安装docker-ce 
  4. yum -y install docker-ce 
  5. # 设置开机自启动并启动docker 
  6. systemctl enable docker && systemctl start docker 
  7. # 查看docker版本 
  8. docker version 

配置kubernetes的yum源

  1. cat > /etc/yum.repos.d/kubernetes.repo << EOF 
  2. [kubernetes] 
  3. name=Kubernetes 
  4. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 
  5. enabled=1 
  6. gpgcheck=0 
  7. repo_gpgcheck=0 
  8. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg 
  9. EOF 

安装kubeadm、kubelet、kubectl

  1. yum -y install kubeadm kubelet kubectl 
  2. systemctl enable kubelet 

kubelet是kubernetes项目用来操作Docker等容器运行时的核心组件,在每个节点上都存在,可以说除了跟容器运行时打交道外,kubelet在配置容器网络、管理容器数据卷时,他都需要直接操作宿主机

如果kubelet本身就是运行在一个容器里,那么直接操作宿主机就会变的很麻烦,所以为了解决这个问题,kubeadm选择直接将kubelet部署在宿主机上,然后使用容器部署其他组件

部署kubernetes Master

  1. kubeadm init \ 
  2. --apiserver-advertise-address=172.22.29.78 \ 
  3. --image-repository registry.aliyuncs.com/google_containers \ 
  4. --kubernetes-version v1.21.2 \ 
  5. --service-cidr=10.1.0.0/16 \ 
  6. --pod-network-cidr=10.244.0.0/16 

提示coredns:v1.8.0不存在,解决办法:

  1. # 添加docker加速器 
  2. tee /etc/docker/daemon.json <<-'EOF' 
  3.   "registry-mirrors": ["https://fl791z1h.mirror.aliyuncs.com"
  4. EOF 
  5. systemctl daemon-reload 
  6. systemctl restart docker 
  7. # 手动下载coredns镜像 
  8. docker pull coredns/coredns:1.8.0 
  9. # 修改镜像tag 
  10. docker tag coredns/coredns:1.8.0 registry.aliyuncs.com/google_containers/coredns:v1.8.0 

之后再重新初始化

最后生成的join部分是节点加入集群的命令

  • 根据提示操作,创建kubectl
  1. mkdir -p $HOME/.kube 
  2. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 
  3. sudo chown $(id -u):$(id -g) $HOME/.kube/config 
  • 设置kubectl自动补充
  1. source <(kubectl completion bash) 

默认token有效期24小时,过期后token不可用,如果后续有node加入,解决方法是重新生成token

  1. kubeadm token create 
  • 查看token
  1. kubeadm token list 

  • 查看pod
  1. kubectl get pod --all-namespaces 

可以看到coredns的pod没有启动,是pending状态,node节点为NotReady,缺少网络pod

node加入集群

  1. kubeadm join 172.22.29.78:6443 --token gtj686.cu5kxoxbgq8iha4m \ 
  2.         --discovery-token-ca-cert-hash sha256:e6aa8e197b74a08d9bae4b5d72854a49980539bc504691440fe5d716a3d299d9 

查看node

安装网络,这里选择calico

  1. kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml 

安装后查看pod状态

从下载镜像到初始化到running状态

calico网络安装的时候,其中有一个pod一直是imagepullbackoff状态

后来发现是因为node没有做镜像仓库加速处理,所以镜像下载失败,导致pod状态一直是imagepullbackoff状态

配置完成后,Pod自动下载镜像,所有pod都running状态

查看node节点的images

至此kubernetes集群部署完毕

测试kubernetes

在集群中创建一个pod,对外暴露端口,验证是否正常访问

  1. # 创建一个nginx的deployment 
  2. kubectl create deployment nginx --image=nginx 
  3. # 对外暴露端口 
  4. kubectl expose deployment nginx --port=80 --type=NodePort 
  5. # 查看pod和svc 
  6. kubectl get pod,svc 

可以看到nginx的pod映射到宿主机端口为30830,安全组和防火墙开放的情况下尝试访问

部署dashboard

  1. # 下载dashboard编排文件 
  2. wget  https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc7/aio/deploy/recommended.yaml 
  3. # 以该编排文件创建pod 
  4. kubectl create -f recommended.yaml 
  5. # 查看创建好的pod和svc 
  6. kubectl get pod,svc -n kubernetes-dashboard 

这里改了recommended.yaml里面,kubernetes-dashboard的端口类型为nodeport,并对外暴露30000

访问提示两种登录方式,这里用token登录

  1. # 获取token 
  2. kubectl describe secrets -n kubernetes-dashboard 

复制token然后登录

提示没有权限,重新创建

  1. # 创建sa,并绑定cluster-admin权限 
  2. apiVersion: v1 
  3. kind: ServiceAccount 
  4. metadata: 
  5.   name: dashboard-admin 
  6.   namespace: kube-system 
  7. --- 
  8. kind: ClusterRoleBinding 
  9. apiVersion: rbac.authorization.k8s.io/v1beta1 
  10. metadata: 
  11.   name: dashboard-admin 
  12. subjects: 
  13.   - kind: ServiceAccount 
  14.     name: dashboard-admin 
  15.     namespace: kube-system 
  16. roleRef: 
  17.   kind: ClusterRole 
  18.   name: cluster-admin 
  19.   apiGroup: rbac.authorization.k8s.io 
  20.  
  21. # 将上面的编排文件保存为k8s-admin.yaml,然后创建 
  22. kubectl create -f k8s-admin.yaml 

重新获取token,重新登录

  1. kubectl describe secret -n kube-system 

创建用户的时候,这里走进误区了,刚开始一直创建的是在kubernetes-dashboard的namespaces,其实这个namespaces下什么权限都没有,所以它创建的user的token是获取不到任何内容的

修改了yaml,重新创建sa之后,在kube-system中找到dashboard-admin用户的token,重新登录后,一切ok

 

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/252745.html<

(0)
运维的头像运维
上一篇2025-04-29 14:11
下一篇 2025-04-29 14:13

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注