kubernetes怎么用

发布时间:2021-12-24 15:34:40 作者:小新
来源:亿速云 阅读:163

Kubernetes怎么用

目录

  1. Kubernetes简介
  2. Kubernetes的核心概念
  3. Kubernetes的安装与配置
  4. Kubernetes的基本操作
  5. Kubernetes的网络
  6. Kubernetes的存储
  7. Kubernetes的监控与日志
  8. Kubernetes的安全
  9. Kubernetes的扩展与自定义
  10. Kubernetes的最佳实践
  11. 总结

Kubernetes简介

Kubernetes(通常缩写为K8s)是一个开源的容器编排平台,用于自动化应用程序的部署、扩展和管理。它最初由Google开发,并于2014年开源。Kubernetes的设计目标是提供一个可扩展、高可用的平台,用于管理容器化应用程序。

Kubernetes的核心功能包括:

Kubernetes的核心概念

Pod

Pod是Kubernetes中最小的部署单元。一个Pod可以包含一个或多个容器,这些容器共享相同的网络命名空间和存储卷。Pod是短暂的,它们可以被创建、销毁和替换。

Node

Node是Kubernetes集群中的工作节点,可以是物理机或虚拟机。每个Node上运行着Kubelet,它是Kubernetes的代理,负责与主节点通信并管理Pod。

Service

Service是Kubernetes中的一种抽象,用于定义一组Pod的访问策略。Service可以为Pod提供稳定的IP地址和DNS名称,并负责负载均衡。

Deployment

Deployment是Kubernetes中用于管理Pod副本的控制器。它允许用户定义Pod的期望状态,并自动确保实际状态与期望状态一致。Deployment还支持滚动更新和回滚。

Namespace

Namespace是Kubernetes中的一种虚拟集群,用于将资源分组和管理。不同的Namespace可以包含相同名称的资源,但它们彼此隔离。

Kubernetes的安装与配置

Minikube

Minikube是一个用于在本地运行单节点Kubernetes集群的工具。它非常适合开发和测试。

# 安装Minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

# 启动Minikube
minikube start

kubeadm

kubeadm是Kubernetes官方提供的用于快速部署多节点集群的工具。

# 安装kubeadm
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

# 初始化主节点
sudo kubeadm init

# 加入工作节点
kubeadm join <master-ip>:<master-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>

Kubectl

kubectl是Kubernetes的命令行工具,用于与集群交互。

# 安装kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

# 配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Kubernetes的基本操作

创建Pod

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx
kubectl apply -f pod.yaml

创建Service

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376
kubectl apply -f service.yaml

创建Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: nginx
kubectl apply -f deployment.yaml

扩展与缩减应用

kubectl scale deployment my-deployment --replicas=5

滚动更新

kubectl set image deployment/my-deployment my-container=nginx:1.19

Kubernetes的网络

ClusterIP

ClusterIP是默认的Service类型,它为Pod提供一个集群内部的IP地址。

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: ClusterIP
  selector:
    app: my-app
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376

NodePort

NodePort在每个Node上打开一个端口,允许外部流量访问Service。

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: NodePort
  selector:
    app: my-app
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376
    nodePort: 30007

LoadBalancer

LoadBalancer为Service提供一个外部负载均衡器。

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: LoadBalancer
  selector:
    app: my-app
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376

Ingress

Ingress用于管理外部HTTP/HTTPS流量的路由。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - host: my-app.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-service
            port:
              number: 80

Kubernetes的存储

Volume

Volume是Kubernetes中用于持久化存储的抽象。

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx
    volumeMounts:
    - mountPath: /usr/share/nginx/html
      name: my-volume
  volumes:
  - name: my-volume
    hostPath:
      path: /data
      type: Directory

PersistentVolume

PersistentVolume(PV)是集群中的一块存储资源。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /mnt/data

PersistentVolumeClaim

PersistentVolumeClaim(PVC)是用户对存储资源的请求。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

Kubernetes的监控与日志

Metrics Server

Metrics Server是Kubernetes集群中的资源使用情况监控工具。

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

Prometheus

Prometheus是一个开源的监控和告警系统。

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install prometheus prometheus-community/prometheus

EFK Stack

EFK Stack(Elasticsearch, Fluentd, Kibana)用于日志收集和可视化。

helm repo add elastic https://helm.elastic.co
helm install elasticsearch elastic/elasticsearch
helm install fluentd elastic/fluentd
helm install kibana elastic/kibana

Kubernetes的安全

RBAC

RBAC(Role-Based Access Control)用于控制用户和服务的访问权限。

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

Network Policies

Network Policies用于控制Pod之间的网络流量。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: my-network-policy
spec:
  podSelector:
    matchLabels:
      role: db
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          role: frontend
    ports:
    - protocol: TCP
      port: 6379
  egress:
  - to:
    - ipBlock:
        cidr: 10.0.0.0/24
    ports:
    - protocol: TCP
      port: 5978

Secrets

Secrets用于存储敏感信息,如密码和API密钥。

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  username: YWRtaW4=
  password: MWYyZDFlMmU2N2Rm

Kubernetes的扩展与自定义

Custom Resource Definitions (CRDs)

CRDs允许用户定义自己的资源类型。

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: myresources.example.com
spec:
  group: example.com
  versions:
    - name: v1
      served: true
      storage: true
  scope: Namespaced
  names:
    plural: myresources
    singular: myresource
    kind: MyResource
    shortNames:
    - mr

Operators

Operators是Kubernetes的扩展,用于自动化应用程序的管理。

kubectl apply -f https://operatorhub.io/install/etcd-operator.yaml

Kubernetes的最佳实践

资源限制与请求

为容器设置资源限制和请求,以确保资源的合理分配。

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"

健康检查

为容器设置健康检查,以确保应用程序的可用性。

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
      initialDelaySeconds: 3
      periodSeconds: 3

自动伸缩

使用Horizontal Pod Autoscaler(HPA)自动扩展应用程序。

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: my-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-deployment
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

总结

Kubernetes是一个功能强大的容器编排平台,它提供了自动化部署、扩展、自我修复、负载均衡和存储编排等功能。通过理解Kubernetes的核心概念、掌握基本操作、配置网络和存储、实施监控与日志、加强安全措施、扩展与自定义资源,以及遵循最佳实践,用户可以有效地管理和运行容器化应用程序。Kubernetes的灵活性和可扩展性使其成为现代云原生应用的首选平台。

推荐阅读:
  1. Kubernetes中的kubectl怎么用
  2. Kubernetes的Secret对象怎么用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

kubernetes

上一篇:C语言扩展怎么实现

下一篇:linux中如何删除用户组

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》