Admin

K8S学习笔记
2020年8月12日 14:00 55 0 1 0

K8S学习笔记

概念

参考链接

Pod

  • Pod 是 Kubernetes 集群中最基本的资源对象
  • Pod 是一组有依赖关系的容器
  • Pod 由一个或多个业务容器和一个根容器 (Pause 容器) 组成
  • Pod 里的多个容器共享同一个 IP、命名空间、端口、存储卷等
  • Pod 里的多个容器之间能通过 Localhost 来通信
  • Pod 里的多个容器都会运行在同一个节点上
  • Pod 可能在集群中的任何一个节点
  • Pod 的生命周期是短暂的

Service

  • Service 是对后端提供服务的一组 Pod 的抽象
  • Service 会绑定到一个固定的虚拟 IP
  • Service 的虚拟 IP 并不对应一个虚拟或者物理设备
  • Service 的虚拟 IP 只在 Kubernetes Cluster 中可见
  • Service 的虚拟 IP只是 iptables 中的规则
  • Service 的虚拟 IP将服务请求路由到后端的 Pod

Minikube

使用教程,搭建基于Linux + VirtuakBox 的集群,并启动Dashboard

这里我选择 docker 模式(docker in docker?)

首先将普通账户加入用户组 docker

  1. sudo usermod -aG docker $USER && newgrp docker

进一步,修改 sock 文件权限,否则后续部分命令可能无法访问 docker.sock 错误

  1. sudo chmod a+rw /var/run/docker.sock
  2. sudo systemctl restart docker
  3. docker info

普通账户运行命令,创建集群:

  1. minikube start \
  2. --driver=docker \
  3. --cpus 4 \
  4. --memory 16384 \
  5. --insecure-registry 192.168.1.111:4999

创建成功后,会在宿主机上创建一个容器 minikube ,并在容器内运行单节点K8S
另外,还会将宿主机的kubectl的配置文件,配置到这个K8S的API Server

Dashboard

启动 dashboard 网页,会省去很多命令操作

  1. minikube dashboard

测试服务

根据文档中,部署测试服务hello-minikube

我在这里的NodePort类型服务测试能访问,但是LoadBalancer类型服务测试不能访问,先不管

测试部署Nginx

终端执行如下命令,并保持运行:

  1. minikube tunnel

进入Dashboard - 右上角加号 创建Deployment

创建

点击Deploy开始部署

点击左侧的发现和负载均衡 - Services显示所有服务,稍等片刻等待nginx行前的图标变成绿色

服务

上述操作等效命令:

  1. kubectl create deployment nginx --image=nginx:latest
  2. kubectl create service nodeport nginx --tcp 8082:80

从Dashboard访问

这个虚拟网络,需要 tunnel 保持运行,才能访问:

  1. minikube tunnel

点击nginx行的外部Endpoints列中的地址,即可通过浏览器访问部署的网页

访问

节点IP端口访问

可以使用http://节点IP:31747访问(不建议长用)

  • 节点IP获取方式后面有说明
  • 端口在截图中 - 内部Endpoints,创建时随机生成
  • 重启后,NodeIP可能会变
  • 如果不是Minikube这样的单节点,服务可能随时跑在任意节点上,所以不建议长用

转发宿主机端口访问

上述两种的访问能力都各有优缺点,参考使用端口转发来访问集群中的应用,将服务转发到宿主机物理网卡,提供集群外访问

执行命令,保持运行:

  1. kubectl port-forward --address 192.168.199.2,127.0.0.1 service/nginx 8082:8082
  • 如果不指定 address,默认只有127.0.0.1
  • 多个IP用逗号分隔
  • 192.168.199.2 是宿主机物理网卡IP
  • 仅支持TCP,UDP计划中

这样,就能通过 宿主机IP:8082 访问服务了

使用Ingress

参考 文档 启用Ingress

  1. minikube addons enable ingress

完成需要一段时间,可能会镜像失败,如果失败 minikube addons disable ingress 后重新来过,使用命令查看状态:

  1. [wood@company ~]$ kubectl get pods -A
  2. NAMESPACE NAME READY STATUS RESTARTS AGE
  3. kube-system ingress-nginx-admission-create-twdjw 0/1 Completed 0 46h
  4. kube-system ingress-nginx-admission-patch-l464s 0/1 Completed 0 46h
  5. kube-system ingress-nginx-controller-7bb4c67d67-n6njx 1/1 Running 3 46h

编写配置 example-ingress.yaml

  1. apiVersion: networking.k8s.io/v1beta1
  2. kind: Ingress
  3. metadata:
  4. name: example-ingress
  5. annotations:
  6. nginx.ingress.kubernetes.io/rewrite-target: /
  7. spec:
  8. rules:
  9. - http:
  10. paths:
  11. - path: /foo
  12. backend:
  13. serviceName: nginx
  14. servicePort: 8082
  15. - path: /bar
  16. backend:
  17. serviceName: nginx
  18. servicePort: 8082

使用命令kubectl apply -f example-ingress.yaml,创建 Ingress

查看创建的Ingress:

  1. [wood@company ~]$ kubectl get ingress
  2. NAME CLASS HOSTS ADDRESS PORTS AGE
  3. example-ingress <none> * 192.168.99.102 80 2m39s

测试机,访问 http://192.168.99.102/foo 或者 http://192.168.99.102/bar 都能访问到这个服务

  • 之所以用了 /foo/bar 是为了以后多个服务,就能这样一起转发

Minicube相关

从虚拟机获得节点IP

打开Virtualbox,在虚拟机列表应该有个minikube,双击打开

在终端输入root以登录,不需要密码

使用命令ifconfig查看其ip

节点IP一般是eth1那个

从Dashboard获取节点IP

点击界面左侧,集群 - Nodes,从列表找到节点,点击名称打开:

打开

节点信息里,资源信息 - 地址 即可看到节点IP

信息

发布内容,请遵守相关法律法规。
评论