一、概念
1、Pod
- k8s 调度的最小单元,一个 pod 包含一组容器,一个 pod 不会跨越多个工作节点
- pod 相当与逻辑主机,每个 pod 都有自己的 IP 地址
- pod 内的容器共享相同的 IP 和端口空间
- 默认情况下,每个容器的文件系统与其他容器完全隔离
2、Deployment
- 可以更好地做弹性扩容,负载均衡。可以实现无人值守
3、Service
- 实现多个pod的统一访问入口
二、实践
kubernetes 安装:https://www.cnblogs.com/fanxp/p/12076982.html
1、nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deplayment
spec:
selector:
matchLabels:
app: nginx
# 数量
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
# 指定镜像
image: nginx:alpine
# 指定暴露端口
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
# service 内部访问端口
- port: 8080
# pod 端口
targetPort: 80
2、在master 中执行
kubectl apply -f nginx.yaml
3、查看pod运行情况
kubectl get pod -o wide
在任意一台node中:curl 10.244.2.2
4、查看service运行情况
kubectl get service
或
kubectl get svc
在任意一台node中:curl 10.96.46.205:8080
5、查看service是否有负载均衡
随便进入一个pod中修改一下nginx的index.html
kubectl exec -it nginx-deplayment-5c559d5697-2r7br sh
# 修改html
vi /usr/share/nginx/html/index.html
多访问几次Service,发现内容发生了变化
6、通过域名访问service
coredns是一个DNS服务器,每当有新的service被创建,kube-dns会添加该service的dns记录。cluster中的pod可以通过{service_name.namespace_name:port}访问service
在任意pod中:wget -q -O - nginx-service.default.svc.cluster.local:8080 或 wget -q -O - nginx-service.default:8080