使用Kubernetes自动化部署和管理容器化应用
使用Kubernetes自动化部署和管理容器化应用
- Kubernetes简介
- 安装Kubernetes
- 使用Minikube安装Kubernetes
- 使用Kubeadm安装Kubernetes
 
- 配置kubectl
- 创建Pod
- 查看Pod
- 创建Deployment
- 创建Service
- 使用ConfigMap
- 使用Secret
- 创建PersistentVolume和PersistentVolumeClaim
- 使用Ingress
- 自动伸缩
- 使用Job
- 使用CronJob
- 使用StatefulSet
- 使用DaemonSet
- 使用NetworkPolicy
- 使用StorageClass
- 总结
 
 
随着容器技术的普及,Kubernetes(简称k8s)成为了行业标准的容器编排工具。Kubernetes不仅可以帮助我们自动化部署、扩展以及管理容器化的应用,还能让我们的应用具有高可用性和容错能力。本文将详细介绍如何使用Kubernetes来自动化部署和管理容器化应用。
Kubernetes是一个开源平台,旨在自动化部署、扩展和管理容器化的应用。 Kubernetes可以在多种环境中安装,包括本地、云服务提供商或裸机集群。 Minikube是在本地机器上运行Kubernetes的一种简单方式。curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
chmod +x minikube
sudo cp minikube /usr/local/bin/
minikube start
 
 
 
sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl
sudo curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
sudo kubeadm init
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
apiVersion: v1
kind: Pod
metadata:name: myapp-podlabels:app: MyApp
spec:containers:- name: MyAppContainerimage: busyboxcommand: ["sh", "-c", "echo Hello Kubernetes! && sleep 3600"]
kubectl apply -f pod.yaml
kubectl get pods
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.7.9ports:- containerPort: 80
kubectl apply -f deployment.yaml
apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:selector:app: nginxports:- protocol: TCPport: 80targetPort: 9376
kubectl apply -f service.yaml
 
 
 
apiVersion: v1
kind: ConfigMap
metadata:name: my-configmap
data:key1: value1key2: value2
kubectl apply -f configmap.yaml
kubectl create secret generic mysecret --from-literal=password=sekret
apiVersion: v1
kind: PersistentVolume
metadata:name: mypv
spec:storageClassName: manualcapacity:storage: 2GiaccessModes:- ReadWriteOncehostPath:path: "/mnt/data"
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: myclaim
spec:storageClassName: manualaccessModes:- ReadWriteOnceresources:requests:storage: 1Gi
kubectl apply -f pv.yaml
kubectl apply -f pvc.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: example-ingressannotations:nginx.ingress.kubernetes.io/rewrite-target: /
spec:rules:- host: example.comhttp:paths:- path: /pathType: Prefixbackend:service:name: example-serviceport:number: 80
kubectl apply -f ingress.yaml
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:name: nginx-hpa
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: nginx-deploymentminReplicas: 1maxReplicas: 10metrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 50
kubectl apply -f hpa.yaml
apiVersion: batch/v1
kind: Job
metadata:name: pi
spec:template:spec:containers:- name: piimage: perlcommand: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]restartPolicy: OnFailure
kubectl apply -f job.yaml
 
 
 
apiVersion: batch/v1
kind: CronJob
metadata:name: hello
spec:schedule: "*/1 * * * *"jobTemplate:spec:template:spec:containers:- name: helloimage: busyboxcommand:- daterestartPolicy: OnFailure
kubectl apply -f cronjob.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:name: web
spec:serviceName: "nginx"replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.7.9ports:- containerPort: 80name: web
kubectl apply -f statefulset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:name: ds-examplelabels:app: ds-example
spec:selector:matchLabels:app: ds-exampletemplate:metadata:labels:app: ds-examplespec:containers:- name: ds-exampleimage: nginxports:- containerPort: 80
kubectl apply -f daemonset.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: test-local
spec:podSelector:matchLabels:app: nginxpolicyTypes:- Ingressingress:- from:- podSelector:matchLabels:app: nginxports:- protocol: TCPport: 6379
kubectl apply -f networkpolicy.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: fast
provisioner: kubernetes.io/aws-ebs
reclaimPolicy: Delete
parameters:type: gp2
kubectl apply -f storageclass.yaml
使用Kubernetes可以让你更有效地部署和管理容器化应用。
