Kubernetes简单实战-帮助新手快速感受一下k8s的操作

k8实战

初始化集群-minikube版k8s

minikube使用指南如下,可以直接看一下官方文档

https://kubernetes.io/docs/tutorials/hello-minikube/

启动minikube集群

查看基本信息

查看dashboard

以后就可以通过浏览器中的dashboard查看集群的情况了

运行一个helloworld-minikube版k8s

运行一个Deployment,控制了一个Pod,其中运行着一个helloworld容器

kubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.39 -- /agnhost netexec --http-port=8080

此时还不能访问,因为Pod部署在集群内部,但是没有部署对应的Service,无法通过Node的ip进行访问。

创建Service

kubectl expose deployment hello-node --type=LoadBalancer --port=8080
这个命令是使用kubectl为名为"hello-node"的部署创建一个暴露 Service。它将创建一个类型为LoadBalancer的 Service,并将流量转发到部署中运行的容器的端口8080。

具体来说,这个命令的含义如下:
- `kubectl expose deployment hello-node`:使用kubectl命令为名为"hello-node"的部署创建一个 Service。
- `--type=LoadBalancer`:定义 Service 的类型为 LoadBalancer。LoadBalancer类型的 Service 在云平台上会自动创建一个负载均衡器,并将请求流量分发到部署中运行的容器实例。
- `--port=8080`:指定 Service 的端口号为8080。这个端口号是 Service 对外暴露的端口,当请求到达 Service 的这个端口时,会被转发到部署中容器的同一个端口号。

通过执行此命令,你创建了一个暴露类型为LoadBalancer的 Service,将流量转发到运行在名为"hello-node"的部署中的容器。LoadBalancer类型的 Service 在云平台上会自动创建一个负载均衡器,可以实现将流量均衡分发到部署中的多个容器实例上,以提高应用程序的可用性和可扩展性。其他客户端可以通过访问该 Service 暴露的端口(例如8080)来访问部署中的容器。

此时该Service还是pending状态

可以通过minikube命令访问这个Service

minikube service hello-node

但是,我不想这样访问,我想直接通过NodeIP访问,这就需要自己写一个Service。

首先,找到Pod的标签

然后写一个新的Service

apiVersion: v1
kind: Service
metadata:
  name: hello-node-service
spec:
  type: NodePort
  selector:
    app: hello-node
  ports:
    - protocol: TCP
      port: 8080 # service的port
      targetPort: 8080 # pod的port
      nodePort: 30000 # 给node分配的port

运行这个yaml

本机可以通过30000端口访问了

访问不了,感觉可能是这个容器有问题,自己再跑一个别的

运行一个nginx容器-OrbStack版k8s

说明:OrbStack自己的k8s的网络多做了一点手脚,看起来很方便,但还是要理解内部端口转发的原理。

# 创建一个deployment nginx 默认端口80(集群内部)
kubectl create deployment nginx --image nginx
# 创建一个NodePort类型的Service,关联nginx的Pod,并关联其80端口
kubectl expose deploy/nginx --type=NodePort --port=80
# 查看Service的信息,主要是查看clusterIp和这个service对外(集群内)暴露的端口32042
kubectl get svc
NAME       TYPE           CLUSTER-IP        EXTERNAL-IP    PORT(S)
nginx      NodePort       192.168.194.217   <none>         80:32042/TCP
# 集群外直接访问即可
curl -I localhost:32042
HTTP/1.1 200 OK
Server: nginx/1.25.2

这里,本地的mac可以直接访问k8s集群内的service的端口32042,应该是OrbStack做了一层映射。

其实OrbStack还支持直接访问clusterip甚至pod的ip,十分灵活,让人不免怀疑,本地的mac也在集群内部。

运行2个微服务容器-正式应用版

先部署一个redis-yaml配置文件方式

apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app: redis
  name: redis
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
  serviceName: redis-svc
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
        - command:
            - redis-server
            - '--requirepass'
            - 'redis'    # 初始密码  
          image: 'redis:7.0.12'
          imagePullPolicy: Always
          name: redis
          ports:
            - containerPort: 6379
              protocol: TCP
      dnsPolicy: ClusterFirst
      restartPolicy: Always
  updateStrategy:
    type: RollingUpdate

---

apiVersion: v1
kind: Service
metadata:
  name: redis-svc # service的name,很重要,相当于域名
spec:
  externalTrafficPolicy: Local
  ports:
    - name: redis-service
      port: 6379
      protocol: TCP
      targetPort: 6379
  selector:
    app: redis
  sessionAffinity: None
  type: NodePort

再部署一个自己的应用(这个应用自己可以随便写,暴露一个接口出来方便测试即可),这里配置要使用k8s访问内部service的形式,这里host已经改成了redis的service的名字
在这里插入图片描述
应用代码编辑完成后,Maven 打包,然后docker做镜像。此处可以自行学习。

创建一个deployment-kubectl命令方式

kubectl create deployment redis-test --image redis-test:10006

访问pod,说明这个pod找到了redis的service,本k8s集群内部可以通过service的name进行访问。

给这个pod关联一个service

kubectl expose deploy/redis-test --type=NodePort --port=8080

有了这个NodePort类型的Service,既可以通过它的cluster ip访问redis-test,也可以直接通过localhost访问redis-test

参考视频

本文随行视频如下:
【k8s简单实战,如何在k8s集群内部署微服务】 https://www.bilibili.com/video/BV1pF4m1j7zv/?share_source=copy_web

  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值