前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kind快速部署Kubernetes多集群

Kind快速部署Kubernetes多集群

作者头像
废柴阿尤
发布2023-12-18 16:33:48
5470
发布2023-12-18 16:33:48
举报
文章被收录于专栏:Typecho_ayou

Kind架构及原理 Kind 使用一个 container 来模拟一个 node,在 container 里面跑 systemd ,并用 systemd 托管 kubelet 以及 containerd,然后通过容器内部的 kubelet 把其他 K8s 组件,比如 kube-apiserver、etcd、CNI 等跑起来。

它可以通过配置文件的方式创建多个 container 来模拟创建多个 node,并以这些 node 构建一个多节点的 Kubernetes 集群。

Kind 内部使用的集群部署工具是 kubeadm,借助 kubeadm 提供的 Alpha 特性,它可以部署包括 HA master 的高可用集群。同时,在 HA master 下, 它还额外部署了一个 Nginx,用来提供负载均衡 vip。

Docker 安装

宿主机安装Docker

代码语言:javascript
复制
root@k8s:~# for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do apt-get remove $pkg; done
代码语言:javascript
复制
root@k8s:~# apt-get update
root@k8s:~# apt-get install ca-certificates curl gnupg
root@k8s:~# install -m 0755 -d /etc/apt/keyrings
root@k8s:~# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
root@k8s:~# chmod a+r /etc/apt/keyrings/docker.gpg
# Add the repository to Apt sources:
root@k8s:~# echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
root@k8s:~# apt-get update

安装Docker

代码语言:javascript
复制
root@k8s:~# apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Kind安装

首先我们下载Kind二进制包

代码语言:javascript
复制
root@k8s:~# wget https://github.com/kubernetes-sigs/kind/releases/download/v0.20.0/kind-linux-amd64
root@k8s:~# mv kind-linux-amd64 /usr/bin/kind
root@k8s:~# chmod +x /usr/bin/kind

指定版本号并创建集群

代码语言:javascript
复制
root@k8s:~# cat >kind-demo.yaml<<EOF
kind: Cluster
name: k8s-kind-demo
apiVersion: kind.x-k8s.io/v1alpha4
networking:
        disableDefaultCNI: false
nodes:
        - role: control-plane
          #- role: control-plane
          #- role: control-plane
        - role: worker
        - role: worker
        - role: worker
EOF

参数详解:

  • name 设置集群名称
  • networking.disableDefaultCNI 创建的集群默认自带一个轻量级的 CNI 插件 kindnetd ,我们也可以禁用默认设置来安装其他 CNI,比如 Calico。
  • nodes control-plance master节点数量
  • nodes worker node节点数量

快速创建集群

本次版本采用v1.24.15

代码语言:javascript
复制
root@k8s:~# kind create cluster --config=kind-demo.yaml --image=kindest/node:v1.24.15 --name=k8s-kind-demo

日志输出以下
Creating cluster "k8s-kind-demo" ...
 ✓ Ensuring node image (kindest/node:v1.24.15) 🖼
 ✓ Preparing nodes 📦 📦
 ✓ Writing configuration 📜
 ✓ Starting control-plane 🕹️
 ✓ Installing CNI 🔌
 ✓ Installing StorageClass 💾
 ✓ Joining worker nodes 🚜
Set kubectl context to "kind-k8s-kind-demo"
You can now use your cluster with:
kubectl cluster-info --context kind-k8s-kind-demo
Thanks for using kind! 😊

安装kubectl

代码语言:javascript
复制
root@k8s:~# curl -LO https://dl.k8s.io/release/v1.24.15/bin/linux/amd64/kubectl
root@k8s:~# chmod +x kubectl
root@k8s:~# mv kubectl /usr/bin/

可以查看集群状态

代码语言:javascript
复制
root@k8s:~# kubectl cluster-info --context kind-k8s-kind-demo
Kubernetes control plane is running at https://127.0.0.1:42687
CoreDNS is running at https://127.0.0.1:42687/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'

接下来我们就可以get node查看到节点信息

代码语言:javascript
复制
root@k8s:~# kubectl  get  node
NAME                                STATUS   ROLES           AGE    VERSION
k8s-kind-demo-control-plane   Ready    control-plane   2m2s   v1.24.15
k8s-kind-demo-worker          Ready    <none>          90s    v1.24.15
root@k8s:~# kubectl get pod -n kube-system
NAME                                                        READY   STATUS    RESTARTS   AGE
coredns-57575c5f89-9ltk6                                    /1     Running             108s
coredns-57575c5f89-glgvh                                    /1     Running             107s
etcd-k8s-kind-demo-control-plane                      /1     Running             2m7s
kindnet-ljptz                                               /1     Running             99s
kindnet-qzglw                                               /1     Running             109s
kube-apiserver-k8s-kind-demo-control-plane            /1     Running             2m5s
kube-controller-manager-k8s-kind-demo-control-plane   /1     Running             2m1s
kube-proxy-kvzx9                                            /1     Running             109s
kube-proxy-pnzmz                                            /1     Running             99s
kube-scheduler-k8s-kind-demo-control-plane            /1     Running             2m9s

Kind 常用命令

代码语言:javascript
复制
查看集群
root@k8s:~# kind get clusters
删除集群
root@k8s:~# kind delete cluster --name 集群名称

Kind创建多套集群

实际上只是需要给yaml文件修改即可

代码语言:javascript
复制
root@k8s:~# cat  >kind-demo1.yaml<<EOF
kind: Cluster
name: k8s-kind-demo1
apiVersion: kind.x-k8s.io/v1alpha4
networking:
        disableDefaultCNI: true  #这里开启个cni
nodes:
        - role: control-plane
          #- role: control-plane
          #- role: control-plane
        - role: worker
EOF

disableDefaultCNI禁用了默认的kindnetd插件,CNI就需要我们自己安装flannel或者其它calico组件

使用下面命令创建集群

版本我们换成1.28.0

代码语言:javascript
复制
root@k8s:~# kind create cluster --config=kind-demo1.yaml --image=kindest/node:v1.28.0 --name=k8s-kind-demo1

日志 输出如下
Creating cluster "k8s-kind-demo1" ...
 ✓ Ensuring node image (kindest/node:v1.28.0) 🖼
 ✓ Preparing nodes 📦 📦
 ✓ Writing configuration 📜
 ✓ Starting control-plane 🕹️
 ✓ Installing StorageClass 💾
 ✓ Joining worker nodes 🚜
Set kubectl context to "kind-k8s-kind-demo1"
You can now use your cluster with:
kubectl cluster-info --context kind-k8s-kind-demo1
Thanks for using kind! 😊

查看集群状态

代码语言:javascript
复制
root@k8s:~# kubectl get node
NAME                                 STATUS     ROLES           AGE     VERSION
k8s-kind-demo1-control-plane   NotReady   control-plane   3m46s   v1.28.0
k8s-kind-demo1-worker          NotReady   <none>          3m17s   v1.28.0
pod状态
root@k8s:~# kubectl get pod -n kube-system
NAME                                                         READY   STATUS    RESTARTS   AGE
coredns-5dd5756b68-l94jm                                     /1     Pending             3m58s
coredns-5dd5756b68-psm7p                                     /1     Pending             3m58s
etcd-k8s-kind-demo1-control-plane                      /1     Running             4m12s
kube-apiserver-k8s-kind-demo1-control-plane            /1     Running             4m11s
kube-controller-manager-k8s-kind-demo1-control-plane   /1     Running             4m12s
kube-proxy-bln4n                                             /1     Running             3m50s
kube-proxy-l4k49                                             /1     Running             3m59s
kube-scheduler-k8s-kind-demo1-control-plane            /1     Running             4m16s

切换集群

  • 1.24集群版本默认cni插件
  • 1.28集群版本不使用默认插件

接下来可以通过kubectl config use-context xx_name快速切换集群 首先获取Cluster名称,我现在在k8s 1.28版本,现在我切换到1.24.15版本

代码语言:javascript
复制
root@k8s:~# kind get clusters
k8s-kind-demo
k8s-kind-demo1

切换到k8s-kind-demo集群

代码语言:javascript
复制
root@k8s:~# kubectl config use-context kind-k8s-kind-demo
Switched to context "kind-ak8s-kind-demo".
root@k8s:~# kubectl get node
NAME                                STATUS   ROLES           AGE   VERSION
k8s-kind-demo-control-plane   Ready    control-plane   43m   v1.24.15
k8s-kind-demo-worker          Ready    <none>          43m   v1.24.15

切换到k8s-kind-demo1集群

代码语言:javascript
复制
root@k8s:~# kubectl config use-context kind-k8s-kind-demo1
Switched to context "kind-k8s-kind-demo1".
root@k8s:~# kubectl get node
NAME                                 STATUS     ROLES           AGE   VERSION
k8s-kind-demo1-control-plane   NotReady   control-plane   36m   v1.28.0
k8s-kind-demo1-worker          NotReady   <none>          36m   v1.28.0

测试集群

代码语言:javascript
复制
root@k8s:~# cat<<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:alpine
        name: nginx
        ports:
        - containerPort: 
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  selector:
    app: nginx
  type: NodePort
  ports:
    - protocol: TCP
      port: 
      targetPort: 
      nodePort: 
---
apiVersion: v1
kind: Pod
metadata:
  name: busybox
  namespace: default
spec:
  containers:
  - name: busybox
    image: centos:v1
    command:
      - sleep
      - "3600"
    imagePullPolicy: IfNotPresent
  restartPolicy: Always
EOF

查看服务状态

代码语言:javascript
复制
root@k8s:~#  kubectl get pod,svc
NAME                         READY   STATUS    RESTARTS   AGE
pod/busybox                  /1     Running             2m27s
pod/nginx-6fb79bc456-st6qk   /1     Running             2m27s
NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1      <none>        /TCP        48m
service/nginx        NodePort    10.96.93.229   <none>        :30001/TCP   2m28s

测试dns

代码语言:javascript
复制
root@k8s:~# kubectl exec -ti busybox -- nslookup kubernetes
Server:     10.96.0.10
Address:    10.96.0.10#53
Name:   kubernetes.default.svc.cluster.local
Address: 10.96.0.1

测试nginx nodeport

nginx nodeport>nginx需要进入到node容器

代码语言:javascript
复制
root@k8s:~# kubectl get node
NAME                                STATUS   ROLES           AGE   VERSION
k8s-kind-demo-control-plane   Ready    control-plane   53m   v1.24.15
k8s-kind-demo-worker          Ready    <none>          52m   v1.24.15
root@k8s:~# docker exec -it  k8s-kind-demo-control-plane bash
root@k8s-kind-demo-control-plane:/#

访问nginx

代码语言:javascript
复制
root@k8s:~# curl 10.96.93.229
nginx
nginx
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023年11月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Docker 安装
  • Kind安装
  • Kind创建多套集群
  • 测试集群
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档