博客 【K8S系列】快速初始化⼀个最⼩集群

【K8S系列】快速初始化⼀个最⼩集群

   数栈君   发表于 2023-08-29 10:07  192  0

写在前面

k8s作为⼀个相对⽐较复杂的系统,它有⼀定的⼊⻔⻔槛,我曾浏览它的⽂档很多次,光是在安装的环节上就耗费很久,劝退指数极⾼,但是我们不需要⼀开始就花费很多的时间从安装开始接触它

所以我们可以借⽤Docker-Desktop快速启动⼀个本地化最⼩集群,能让我们快速上⼿演练,随着对k8s的理解加深,安装的部分也就迎刃⽽解了。

1 安装

打开Docker-desktop,进⼊设置,可以看到有kubernetes选项,注意不同的docker版本,这⾥的k8s版本也有区别,

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/90e9e174b86d1fb9748f868ee8891ad7..png


你可以直接点击Enable的话,等一会,如果成功的话,就直接安装就行了,安装成功,可以看到这一个信息

安装成功
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/6de93127b772b53d561830c9f55992d2..png
  

kubectl get nodes
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/a6a827c14e977d52babb400bcc048de8..png
  

不成功情况
如果不成功,⼤概率因为k8simage拉取问题,导致是⽆法启动的,所以这⾥要先解决镜像

可以从国内镜像源拉取,然后修改镜像名称,这样就可以了

⽐如这台电脑,⿊苹果由于系统版本10.15.7,⽀持的docker-desktop版本⽐较⽼⼀点,所以这⾥的k8s版本是v1.24.0,

修改镜像源
下⾯就可以通过写好的脚本从阿⾥云拉取镜像,注意替换你的k8s版本,关于etcd,coredns的版本可以查⼀下ChatGPT,让它快速告诉你指定k8s对应的这两者的版本,或者保持不动,因为理论上这两个基础组件在1.24和1.25变化不⼤的,应该可以兼容:

#!/bin/bash

set -e
KUBE_VERSION=v1.24.0
KUBE_PAUSE_VERSION=3.5
ETCD_VERSION=3.4.13-0
COREDNS_VERSION=1.8.0
GCR_URL=k8s.gcr.io
ALIYUN_URL=registry.cn-hangzhou.aliyuncs.com/google_containers
# get images
images=(kube-proxy:${KUBE_VERSION}
kube-scheduler:${KUBE_VERSION}
kube-controller-manager:${KUBE_VERSION}
kube-apiserver:${KUBE_VERSION}
pause:${KUBE_PAUSE_VERSION}
etcd:${ETCD_VERSION}
coredns:${COREDNS_VERSION})
for imageName in ${images[@]} ; do
docker pull $ALIYUN_URL/$imageName
docker tag $ALIYUN_URL/$imageName $GCR_URL/$imageName
docker rmi $ALIYUN_URL/$imageName
done
# show images
docker images

执⾏等待拉取完毕后检查⼀下,然后就可以点击Enable了,需要等待⼏分钟。

K8S显⽰运⾏成功后,你可以在shell中运⾏kubectl命令查看节点状态:

kubectl get nodes
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/c737865fe163f9653ce03e0ae00711da..png
  

2 测试

部署Nginx
可以看到⼀个单节点的集群就运⾏起来了,下⾯我们简单跑⼀个development容器看⼀下集群⼯作状态是否正常,这⾥可以先不管这些yaml⽂件描述的什么,

部署 Deployment
可以使用Kubernetes来部署Nginx。以下是一个简单的Deployment示例:

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

解释一下上述的YAML文件:

kind: Deployment表示创建一个Deployment。
metadata.name:指定Deployment的名称。
spec.replicas:设置replica数量为1。
selector.matchLabels:定义了应该匹配哪些Pod,使用app: nginx标签匹配。
template.metadata.labels:为此Deployment创建一个独立的Pod。
spec.containers:定义了一个名为nginx的容器,在此容器中运行Nginx镜像。
ports:将容器的80公开。
执行以下命令创建Deployment:

kubectl apply -f deployment.yaml
在Kubernetes中使用kubectl get deployments命令可以看到Deployment已经成功创建了。我们还可以使用以下命令查看Pod运行状态:

kubectl get pods
如果一切正常,你应该能够看到类似下面的输出:

NAME READY STATUS RESTARTS AGE
nginx-deployment-6b67fd5895-p8qs8 1/1 Running 0 25s
部署service
现在,Nginx已经在Kubernetes中以Deployment的方式部署好了。如果需要通过外部IP访问Nginx服务,还需要创建一个Service。

可以通过创建一个Service将Nginx服务暴露给集群外部IP。

以下是一个简单的Service示例,将Nginx Service暴露的端口设置为NodePort类型,

使用NodePort类型的Service可以将集群内部的服务端口映射到集群外部的一个随机端口上:

apiVersion: v1
kind: Service
metadata:
    name: nginx-service
spec:
    selector:
        app: nginx
    ports:
        - name: http
        protocol: TCP
        port: 80
        targetPort: 80
        nodePort: 30001
    type: NodePort
解释一下上述的YAML文件:

kind: Service表示创建一个Service。
metadata.name: 指定Service的名称。
spec.selector: 将Service绑定到定义了app: nginx标签的Pod列表。
spec.ports: 定义了Nginx服务的端口信息。
type: NodePort 表示Service类型为NodePort,将指定的端口暴露给集群外部IP以供访问。
执行以下命令创建Service:

kubectl apply -f service.yaml
现在,我们可以通过以下命令查看创建的Service:

kubectl get services
如果一切正常,你应该能够看到类似下面的输出:

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-service NodePort 10.108.90.45 <none> 80:30001/TCP
在上面的输出结果中, 30001 端口对应着Nginx的HTTP端口,

如果你使用的是云服务提供商的集群,可以找到具体的EXTERNAL-IP地址,然后在浏览器中输入 EXTERNAL-IP:30001 来访问Nginx服务。

如果你使用的是本地单节点的集群,可以在本地使用 localhost:30001 访问Nginx服务。

完整脚本:
apiVersion: apps/v1
kind: Deployment
metadata:
    name: nginx-deployment
spec:
    replicas: 1
    selector:
        matchLabels:
            app: nginx
    template:
        metadata:
            labels:
                app: nginx
        spec:
            containers:
            - name: nginx
                image: nginx:latest
                ports:
                - containerPort: 80
                - containerPort: 443


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

执行命令

kubectl apply -f nginx.yml
 

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/fe79c8f4849bece007512ce904137eb9..png
  





免责申明:


本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!

《数据治理行业实践白皮书》下载地址:https://fs80.cn/4w2atu

《数栈V6.0产品白皮书》下载地址:
https://fs80.cn/cw0iw1

想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:
https://www.dtstack.com/?src=bbs

同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:
https://github.com/DTStack

0条评论
下一篇:
社区公告
  • 大数据领域最专业的产品&技术交流社区,专注于探讨与分享大数据领域有趣又火热的信息,专业又专注的数据人园地

最新活动更多
微信扫码获取数字化转型资料
钉钉扫码加入技术交流群