一、部署应用
创建deployment,部署pod
[root@k8s-master ~]# kubectl create deployment d-nginx --image=nginx
deployment.apps/d-nginx created
[root@k8s-master ~]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
d-nginx 1/1 1 1 111s
kubectl create deployment 创建部署控制器
d-nginx 是控制器的名字
--image=nginx 指定控制器去启动pod使用的镜像
扩缩
副本数扩成五个
[root@k8s-master ~]# kubectl scale --replicas 5 deployment d-nginx
deployment.extensions/d-nginx scaled
[root@k8s-master ~]# kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
d-nginx 5/5 5 5 6m29s
查看pod的状态
[root@k8s-master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
d-nginx-74697557db-5nqmk 1/1 Running 0 9m53s
d-nginx-74697557db-5vxn2 1/1 Running 0 9m53s
d-nginx-74697557db-7b7t2 1/1 Running 0 14m
d-nginx-74697557db-7s62z 1/1 Running 0 9m53s
d-nginx-74697557db-fm4b7 1/1 Running 0 9m53s
deployment和replicaSet的关系
通过yaml文件部署应用
[root@k8s-master ~]# vim c-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: c-nginx #deployment名称
spec:
selector:
matchLabels:
run: c-nginx
replicas: 6 #副本数
template:
metadata:
labels:
run: c-nginx
spec:
containers:
- name: c-nginx
image: nginx #指定镜像
ports:
- containerPort: 80 # 暴露端口
[root@k8s-master ~]# kubectl apply -f c-nginx.yaml
deployment.apps/c-nginx created
二、使用服务暴露你的应用
原理图
命令:
kubectl expose deployment/c-nginx
以yaml文件的方式
[root@k8s-master ~]# vim service.yaml
apiVersion: v1
kind: Service
metadata:
name: c-nginx
labels:
run: c-nginx
spec:
type: NodePort
ports:
- port: 8080 #vip端口
targetPort: 80 #容器里面开放的端口
protocol: TCP
name: http
selector:
run: c-nginx
~
应用
[root@k8s-master ~]# kubectl apply -f service.yaml
service/c-nginx created
[root@k8s-master ~]# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
c-nginx NodePort 10.1.216.173 <none> 8080:30543/TCP 16s
kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 13d
测试
[root@k8s-master ~]# curl 10.1.216.173:30543
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
流程图
三、服务暴露的类型
-
ClusterIP (默认) - 在集群的内部 IP 上公开 Service 。这种类型使得 Service 只能从集群内访问。
-
NodePort - 使用 NAT 在集群中每个选定 Node 的相同端口上公开 Service 。使用
<NodeIP>:<NodePort>
从集群外部访问 Service。是 ClusterIP 的超集。
-
NodePort - 使用 NAT 在集群中每个选定 Node 的相同端口上公开 Service 。使用
<NodeIP>:<NodePort>
从集群外部访问 Service。是 ClusterIP 的超集。
-
ExternalName - 通过返回带有该名称的 CNAME 记录,使用任意名称(由 spec 中的
externalName
指定)公开 Service。不使用代理。这种类型需要kube-dns
的v1.7或更高版本