K8S单节点部署及集群部署过程

 更新时间:2025年06月16日 15:05:12   作者:Gen邓艮艮  
这篇文章主要介绍了K8S单节点部署及集群部署过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

1.Minikube搭建单节点K8S

前置条件:安装docker,注意版本兼容问题

# 配置docker源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

# 安装docker环境依赖
yum install -y yum-utils device-mapper-persistent-data lvm2

# 安装docker
yum install -y docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io

# 启动docker并设置开机自启
systemctl start docker && systemctl enable docker

# 配置镜像加速
vim /etc/docker/daemon.json
{
    "registry-mirrors": [
        "https://docker.m.daocloud.io",
        "https://dockerproxy.com",
        "https://registry.docker-cn.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://hub-mirror.c.163.com",
        "https://hub.uuuadc.top",
        "https://docker.anyhub.us.kg",
        "https://dockerhub.jobcher.com",
        "https://dockerhub.icu",
        "https://docker.ckyl.me",
        "https://docker.awsl9527.cn",
        "https://mirror.baidubce.com"
    ]
}

# 重新启动docker
systemctl daemon-reload && systemctl restart docker

安装kubectl和minikube

# 下载kubectl上传到服务器
http://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl

# 下载后重命名minikube并上传到服务器
https://storage.googleapis.com/minikube/releases/v1.18.0/minikube-linux-amd64

# 添加执行权限
chmod +x kubectl && chmod +x minikube
  
# 复制到/usr/local/bin
cp kubectl /usr/local/bin/ && cp minikube /usr/local/bin/

# 查看版本检查是否安装成功
kubectl version --client
minikube version

# 配置源
vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

# 更新yum缓存
yum clean all
yum -y makecache

# 安装bash-completion conntrack
yum -y install bash-completion socat conntrack
source /etc/profile.d/bash_completion.sh

# 拉取minikube启动所需镜像
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.18.0 &&
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.18.0 &&
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.18.0 &&
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.0 &&
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 &&
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3 &&
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7 &&
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/storage-provisioner:v1.8.1

# 打标签
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.18.0 k8s.gcr.io/kube-apiserver:v1.18.0 &&
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.18.0 k8s.gcr.io/kube-controller-manager:v1.18.0 &&
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.18.0 k8s.gcr.io/kube-scheduler:v1.18.0 &&
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.0 k8s.gcr.io/kube-proxy:v1.18.0 &&
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2 &&
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3 k8s.gcr.io/etcd:3.4.3-0 &&
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7 &&
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/storage-provisioner:v1.8.1 gcr.io/k8s-minikube/storage-provisioner:v1.8.1

# 启动minikube –vm-driver=none表示使用Linux本机作为运行环境,--kubernetes-version表示使用的版本
minikube start --vm-driver=none --kubernetes-version='v1.18.0'

# 启动kubectl proxy
kubectl proxy --port=8001 --address='192.168.91.129' --accept-hosts='^.*' &
# 在kubectl proxy中运行
minikube dashboard

# 浏览器访问:http://192.168.91.129:8001/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/#/overview?namespace=default

# 查看K8S集群信息
kubectl cluster-info
# 查看节点信息
kubectl get node
# 查看内部组件
kubectl get pod -A

测试部署nginx

# 创建deployment(Pod控制器的一种,直接删除Pod后,会自动创建新的,需要删除deployment)
kubectl create deploy gen-nginx --image=nginx:1.23.0
# 对比docker部署
# docker run --name gen-nginx -p 8080:80 -d nginx:1.23.0

# 查看deployment和pod
kubectl get deploy,pod,svc

# 暴露80端口
kubectl expose deploy gen-nginx --port=80 --type=NodePort

# 转发端口(Mini Kube临时),解释:kubectl port-forward转发一个本地端口到Pod端口,不会返回数据,需要另开终端练习
kubectl port-forward --address 0.0.0.0 service/gen-nginx 80:80

# 浏览器访问http://192.168.91.129/

2.KubeAdm搭建多节点K8S集群

安装docker(主节点+工作节点),见文章上面,此处不重复编写

配置阿里云镜像源(主节点+工作节点)vim /etc/yum.repos.d/kubernetes.repo

[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

安装kubelet kubeadm kubectl(主节点+工作节点)

yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0

初始化主节点(主节点)master主机和K8S版本需配置自己的

kubeadm init \
--apiserver-advertise-address=192.168.91.132 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.18.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
  • –apiserver-advertise-address:主节点的内网ip地址
  • –image-repository:镜像仓库
  • –kubernetes-version:K8S版本
  • –service-cidr --pod-network-cidr:网段不重复即可

等待主节点初始化完成后执行下面命令

主节点执行命令

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

工作节点操作,如若两台虚拟机需注意主机名hostnamectl set-hostname node1

kubeadm join 192.168.91.130:6443 --token bh7nz3.cxb8e9jtvqjc6thg \
    --discovery-token-ca-cert-hash sha256:2e41d09d203c66e678a6d71b138e2144daaf6fa42683d2e76ee63e85d5e3e8ec

主节点执行命令

# 查看节点,状态都是NotReady,需要配置网络插件
kubectl get nodes

# 安装网络插件
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
# 出现外网不可用,换种方式解决下,查询raw.githubusercontent.com的ip加入host
vim /etc/hosts
185.199.111.133 raw.githubusercontent.com

# 查看节点状态
kubectl get nodes
# 查看系统Pod状态
kubectl get pods -n kube-system

测试部署nginx

# 创建deployment(Pod控制器的一种)
kubectl create deploy gen-nginx --image=nginx:1.23.0

# 查看deployment和Pod
kubectl get deploy,pod,svc

# 暴露80端口,创建service
kubectl expose deploy gen-nginx --port=80 --type=NodePort

# 查看端口映射
kubectl get deploy,pod,svc

# 浏览器访问,master、node节点ip都可访问 ip:30356(随机生成的端口)
# 注意:kubeadm部署,暴露端口对外服务会随机选端口,默认范围30000~32767,可以修改指定,后续文章记录

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Kubernetes调度机制与策略实验详解

    Kubernetes调度机制与策略实验详解

    本文通过实际操作,详细介绍了Kubernetes调度机制的核心原理和常用调度策略的配置方法,包括节点选择、亲和性与反亲和性、污点与容忍等,实验环境为Kubernetes集群,并通过一系列步骤验证了这些调度策略的实际应用
    2025-12-12
  • 配置Ingress的SSL/TLS证书全过程

    配置Ingress的SSL/TLS证书全过程

    在Kubernetes中配置Ingress的SSL/TLS证书涉及两个主要步骤:首先是创建包含证书的Secret,然后是配置Ingress资源以使用该Secret,这要求已部署IngressController如NGINX,并拥有有效的SSL/TLS证书,可以通过Cert-Manager自动管理证书的申请和续期
    2025-10-10
  • 青龙面板拉库解决没有或丢失依赖can‘t find module的保姆级教程(附青龙面板脚本仓库)

    青龙面板拉库解决没有或丢失依赖can‘t find module的保姆级教程(附青龙面板脚本仓库)

    这篇文章主要介绍了青龙面板拉库解决没有或丢失依赖can‘t find module的保姆级教程(附青龙面板脚本仓库),需要的朋友可以参考下
    2022-05-05
  • Prometheus Operator架构介绍

    Prometheus Operator架构介绍

    这篇文章主要为大家介绍了Prometheus Operator架构介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 普通人如何在区块链行业赚钱

    普通人如何在区块链行业赚钱

    区块链是一项新技术。之所以快速吸引人们的关注,是因为比特币在2017年的暴涨,迅速吸引了大众的视线。而比特币的底层技术,主要是区块链技术
    2018-03-03
  • k8s clientConfig和rawConfig区别解析

    k8s clientConfig和rawConfig区别解析

    k8s clientConfig和rawConfig区别k8s.io/client-gov0.28.2基于kubeconfig可以创建clientConfig和rawConfig,两者区别在于,clientConfig包含了访问kube-apiserver的地址和认证鉴权信息,感兴趣的朋友一起看看吧
    2025-03-03
  • Google Kubernetes Engine 集群实战详解

    Google Kubernetes Engine 集群实战详解

    这篇文章主要为大家介绍了Google Kubernetes Engine 集群实战详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • k8s使用rbd作为存储的操作方法

    k8s使用rbd作为存储的操作方法

    这篇文章主要介绍了k8s使用rbd作为存储的操作方法,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • K8S删除pod的4种方法小结

    K8S删除pod的4种方法小结

    在Kubernetes集群环境中工作时,有时会遇到需要从一个工作节点中删除pod的情况,下面这篇文章主要给大家介绍了关于K8S删除pod的4种方法,需要的朋友可以参考下
    2024-01-01
  • 详解kubectl资源管理命令(陈述式)

    详解kubectl资源管理命令(陈述式)

    kubectl是官方的CTL命令行工具,用于与apiserver进行通信,将用户在命令行输入的命令,组织并转化为apiserver能识别的信息,进而实现管理k8s各种资源的一种有效途径,这篇文章主要介绍了详解kubectl资源管理命令(陈述式),需要的朋友可以参考下
    2025-04-04

最新评论