kubeadm中怎么搭建k8s集群

发布时间:2021-07-30 16:58:54 作者:Leah
来源:亿速云 阅读:156

Kubeadm中怎么搭建k8s集群

目录

  1. 引言
  2. 准备工作
  3. 初始化Master节点
  4. 加入Worker节点
  5. 验证集群状态
  6. 部署应用
  7. 集群管理
  8. 常见问题与解决方案
  9. 总结

引言

Kubernetes(简称K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。Kubeadm是Kubernetes官方提供的一个工具,用于快速搭建Kubernetes集群。本文将详细介绍如何使用Kubeadm搭建一个Kubernetes集群,并涵盖从准备工作到集群管理的各个方面。

准备工作

系统要求

在开始搭建Kubernetes集群之前,确保所有节点满足以下系统要求:

安装Docker

Kubernetes使用Docker作为容器运行时环境。在所有节点上安装Docker:

# 更新包索引
sudo apt-get update

# 安装必要的包
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# 添加Docker仓库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# 更新包索引
sudo apt-get update

# 安装Docker
sudo apt-get install -y docker-ce

# 启动并启用Docker服务
sudo systemctl start docker
sudo systemctl enable docker

安装kubeadm、kubelet和kubectl

在所有节点上安装kubeadm、kubelet和kubectl:

# 添加Kubernetes官方GPG密钥
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

# 添加Kubernetes仓库
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF

# 更新包索引
sudo apt-get update

# 安装kubeadm、kubelet和kubectl
sudo apt-get install -y kubelet kubeadm kubectl

# 锁定kubelet、kubeadm和kubectl的版本,防止自动升级
sudo apt-mark hold kubelet kubeadm kubectl

初始化Master节点

初始化命令

在Master节点上执行以下命令初始化Kubernetes集群:

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

--pod-network-cidr参数指定了Pod网络的CIDR范围,这里使用的是Flannel网络的默认值。

初始化完成后,会输出类似以下的提示信息:

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join <control-plane-endpoint>:<port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>

配置kubectl

按照提示,执行以下命令配置kubectl:

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

安装网络插件

Kubernetes集群需要网络插件来实现Pod之间的通信。这里以Flannel为例:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

加入Worker节点

获取加入命令

在Master节点上,执行以下命令获取加入集群的命令:

kubeadm token create --print-join-command

输出类似以下内容:

kubeadm join <control-plane-endpoint>:<port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>

执行加入命令

在Worker节点上,执行上一步获取的加入命令:

sudo kubeadm join <control-plane-endpoint>:<port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>

验证集群状态

查看节点状态

在Master节点上,执行以下命令查看集群节点状态:

kubectl get nodes

输出类似以下内容:

NAME        STATUS   ROLES    AGE   VERSION
master      Ready    master   10m   v1.22.0
worker-1    Ready    <none>   5m    v1.22.0
worker-2    Ready    <none>   5m    v1.22.0

查看Pod状态

执行以下命令查看集群中所有Pod的状态:

kubectl get pods --all-namespaces

部署应用

创建Deployment

创建一个简单的Nginx Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

保存为nginx-deployment.yaml,然后执行以下命令创建Deployment:

kubectl apply -f nginx-deployment.yaml

创建Service

创建一个Service来暴露Nginx服务:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: NodePort

保存为nginx-service.yaml,然后执行以下命令创建Service:

kubectl apply -f nginx-service.yaml

集群管理

升级集群

要升级Kubernetes集群,首先在所有节点上安装新版本的kubeadm、kubelet和kubectl,然后在Master节点上执行以下命令:

sudo kubeadm upgrade apply v1.23.0

最后,在每个Worker节点上执行以下命令:

sudo kubeadm upgrade node

备份与恢复

备份Kubernetes集群的关键数据,包括etcd数据和kubeconfig文件。可以使用以下命令备份etcd数据:

ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key snapshot save snapshot.db

恢复etcd数据:

ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key snapshot restore snapshot.db

常见问题与解决方案

节点无法加入集群

问题描述:Worker节点无法加入集群,提示connection refusedtimeout

解决方案: 1. 检查Master节点的防火墙设置,确保端口6443和2379/2380(etcd)开放。 2. 检查Worker节点与Master节点之间的网络连接。 3. 确保kubeadm token未过期。

Pod无法正常启动

问题描述:Pod一直处于PendingCrashLoopBackOff状态。

解决方案: 1. 使用kubectl describe pod <pod-name>查看Pod的详细状态和事件。 2. 检查节点资源是否充足(CPU、内存)。 3. 检查网络插件是否正常安装。

网络插件问题

问题描述:Pod之间无法通信,或无法访问外部网络。

解决方案: 1. 检查网络插件的日志,确保其正常运行。 2. 确保--pod-network-cidr参数与网络插件的配置一致。 3. 检查节点的iptables规则,确保没有冲突。

总结

通过本文的步骤,您已经成功使用Kubeadm搭建了一个Kubernetes集群,并部署了一个简单的Nginx应用。Kubernetes的功能非常强大,本文仅涵盖了基础部分。在实际生产环境中,您可能需要进一步配置集群的高可用性、安全性、监控和日志等功能。希望本文能为您提供一个良好的起点,帮助您更好地理解和掌握Kubernetes。

推荐阅读:
  1. kubeadm部署k8s集群以及dashboard页面
  2. K8s集群搭建(kubeadm方案)

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

kubeadm k8s

上一篇:Shell脚本怎么实现删除一年前文件功能

下一篇:利用Shell脚本实现线上服务器之间对比文件是否一致

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》