kubernetes是自动化容器开源平台,实现自动化容器部署,docker可以看做kubernetes的底层组件。kubernetes主要通过部署文件.yaml实现多层容器的完整集群部署。使用kubectl命令行来和kubernetes API进行交互。
一、部署指令
指定目录下创建deployment目录、service目录管理deployment和service的.yaml配置文件。
通过编写对应的.yaml配置文件拉取相应镜像,使用kubectl命令行创建pod和service服务。(以hello-server服务为例)
kubectl create -f hello-server.yaml
kubectl create -f hello-server -svc.yaml
查看delpoyment
kubectl get deployment
查看deployment部署的pod是否运行
kubectl get pod
查看service
kubectl get service
查看node
kubectl get nodes
删除deployment
kubectl delete deployment hello-server
删除service
kubectl delete service hello-server -svc
二、deployment.yaml文件模版(hello-server.yaml为例)
pod是kubernetes的最基本操作单元,看成对容器的进一步封装。通过deployment上线或部署一个pod,deployment通过.yaml文件配置相应镜像,容器端口等信息。注意镜像拉取更新策略,设置imagePullPolicy:Always保持每次都自动重新拉取镜像。
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: hello-server
spec:
replicas: 1
template:
metadata:
labels:
app: hello-server
spec:
containers:
- name: hello-server
image: hello-server:1.0.0
imagePullPolicy: Always
ports:
- containerPort: 8080
三、service-svc.yaml文件模版(hello-server-svc.yaml为例)
每个pod都会被分配一个单独的IP地址,但是这个IP地址会随时pod的销毁而消失,重启后的pod将可能会被分配一个新的IP地址。如果有一组pod组成一个集群来提供服务,kubernetes通过service来访问这个集群。
一个service可以看作一组提供相同服务的pod的对外访问接口。service被创建时即被分配一个IP地址,在该service被销毁之前这个IP地址不变。
service通过.yaml文件配置相应的服务和外部访问端口等信息。kubernetes支持两种对外提供服务的service的type定义:NodePort和LoadBalancer。采用nodePort对外提供服务访问。.yaml文件指定spec.ports.nodePort的值,系统就会在kubernetes集群中的每个node上打开一个主机上的真实端口号。这样,能够访问node的客户端都就能通过这个端口号访问到内部的service。node就是承载pod运行的宿主主机。
kind: Service
apiVersion: v1
metadata:
name: hello-server-svc
spec:
selector:
app: hello-server
ports:
- protocol: TCP
port: 8080
targetPort: 8080
四、hello-ingress.yaml文件模版
修改ingress & nginx
4.1创建hello的ingress文件:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: hello-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /hello-server
backend:
serviceName: hello-server-svc
servicePort: 8080
4.2 修改nginx,增加如下配置
server {
listen 9000;
server_name 172.31.205.28;
location / {
#index index.html;
proxy_pass http://172.31.205.28/hello-server /;
}
error_page 404 /404.html;
location = /50x.html {
root apps/hello;
}
}
注:.yaml大小写敏感
修改k8s默认端口
/etc/kubernetes/manifests/kube-apiserver.yaml