K8S基本使用方法有哪些

发布时间:2021-12-04 15:08:03 作者:小新
来源:亿速云 阅读:234

K8S基本使用方法有哪些

目录

  1. Kubernetes简介
  2. Kubernetes核心概念
  3. Kubernetes安装与配置
  4. Kubernetes基本操作
  5. Kubernetes高级功能
  6. Kubernetes监控与日志
  7. Kubernetes安全
  8. Kubernetes常见问题与解决方案
  9. 总结

Kubernetes简介

Kubernetes(简称K8S)是一个开源的容器编排平台,用于自动化应用程序的部署、扩展和管理。它最初由Google开发,现在由Cloud Native Computing Foundation(CNCF)维护。Kubernetes提供了一个强大的平台,用于管理容器化应用程序的生命周期,确保它们在高可用性、可扩展性和弹性的环境中运行。

Kubernetes核心概念

Pod

Pod是Kubernetes中最小的部署单元,它可以包含一个或多个容器。Pod中的容器共享网络和存储资源,并且它们总是被调度到同一个节点上。Pod是短暂的,它们的生命周期由Kubernetes管理。

Service

Service是Kubernetes中的一种抽象,用于定义一组Pod的访问策略。Service提供了一个稳定的IP地址和DNS名称,使得应用程序可以通过这些稳定的端点访问Pod,而不需要关心Pod的具体IP地址。

Deployment

Deployment是Kubernetes中用于管理Pod副本的控制器。它允许你定义Pod的副本数量、更新策略和回滚策略。Deployment确保指定数量的Pod始终处于运行状态,并且在更新时可以实现滚动更新。

Namespace

Namespace是Kubernetes中的一种资源隔离机制。它允许你将集群中的资源划分为多个逻辑组,每个Namespace可以包含独立的资源,如Pod、Service、Deployment等。Namespace通常用于多租户环境或不同项目的资源隔离。

ConfigMap和Secret

ConfigMap和Secret是Kubernetes中用于管理配置数据和敏感信息的资源。ConfigMap用于存储非敏感的配置数据,如环境变量、配置文件等。Secret用于存储敏感信息,如密码、API密钥等。

Kubernetes安装与配置

Minikube

Minikube是一个用于在本地运行Kubernetes集群的工具。它适用于开发和测试环境,可以在单节点上运行一个完整的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官方提供的用于快速部署Kubernetes集群的工具。它适用于生产环境,可以在多个节点上部署一个高可用的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

# 初始化Kubernetes集群
sudo kubeadm init

Kubectl

kubectl是Kubernetes的命令行工具,用于与Kubernetes集群进行交互。你可以使用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安装
kubectl version --client

Kubernetes基本操作

创建和管理Pod

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

# 查看Pod状态
kubectl get pods

# 删除Pod
kubectl delete pod my-pod

创建和管理Service

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

# 查看Service状态
kubectl get services

# 删除Service
kubectl delete service my-service

创建和管理Deployment

# deployment.yaml
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
# 创建Deployment
kubectl apply -f deployment.yaml

# 查看Deployment状态
kubectl get deployments

# 删除Deployment
kubectl delete deployment my-deployment

使用Namespace

# 创建Namespace
kubectl create namespace my-namespace

# 查看Namespace
kubectl get namespaces

# 在Namespace中创建资源
kubectl apply -f pod.yaml -n my-namespace

# 删除Namespace
kubectl delete namespace my-namespace

使用ConfigMap和Secret

# configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config
data:
  key1: value1
  key2: value2
# secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  username: dXNlcm5hbWU=
  password: cGFzc3dvcmQ=
# 创建ConfigMap
kubectl apply -f configmap.yaml

# 创建Secret
kubectl apply -f secret.yaml

# 查看ConfigMap和Secret
kubectl get configmaps
kubectl get secrets

# 删除ConfigMap和Secret
kubectl delete configmap my-config
kubectl delete secret my-secret

Kubernetes高级功能

自动扩展

Kubernetes支持水平自动扩展(Horizontal Pod Autoscaler, HPA),它可以根据CPU利用率或其他自定义指标自动调整Pod的副本数量。

# hpa.yaml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: my-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-deployment
  minReplicas: 1
  maxReplicas: 10
  targetCPUUtilizationPercentage: 50
# 创建HPA
kubectl apply -f hpa.yaml

# 查看HPA状态
kubectl get hpa

# 删除HPA
kubectl delete hpa my-hpa

滚动更新

Kubernetes支持滚动更新,它可以在不中断服务的情况下逐步更新Pod的镜像版本。

# 更新Deployment的镜像版本
kubectl set image deployment/my-deployment my-container=nginx:1.19

# 查看更新状态
kubectl rollout status deployment/my-deployment

# 回滚到上一个版本
kubectl rollout undo deployment/my-deployment

资源限制和配额

Kubernetes允许你为Pod和Namespace设置资源限制和配额,以确保资源的合理分配和使用。

# resource-quota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
  name: my-quota
spec:
  hard:
    requests.cpu: "1"
    requests.memory: 1Gi
    limits.cpu: "2"
    limits.memory: 2Gi
# 创建资源配额
kubectl apply -f resource-quota.yaml

# 查看资源配额
kubectl get resourcequotas

# 删除资源配额
kubectl delete resourcequota my-quota

网络策略

Kubernetes支持网络策略(NetworkPolicy),它允许你定义Pod之间的网络通信规则。

# network-policy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: my-network-policy
spec:
  podSelector:
    matchLabels:
      app: my-app
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          role: frontend
    ports:
    - protocol: TCP
      port: 80
  egress:
  - to:
    - podSelector:
        matchLabels:
          role: backend
    ports:
    - protocol: TCP
      port: 3306
# 创建网络策略
kubectl apply -f network-policy.yaml

# 查看网络策略
kubectl get networkpolicies

# 删除网络策略
kubectl delete networkpolicy my-network-policy

Kubernetes监控与日志

监控

Kubernetes提供了多种监控工具,如Prometheus、Grafana等,用于监控集群的健康状态和资源使用情况。

# 安装Prometheus
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/master/bundle.yaml

# 安装Grafana
kubectl apply -f https://raw.githubusercontent.com/grafana/grafana/master/deployment/kubernetes/grafana.yaml

日志

Kubernetes支持多种日志收集工具,如Fluentd、Elasticsearch、Kibana等,用于收集和分析Pod的日志。

# 安装Fluentd
kubectl apply -f https://raw.githubusercontent.com/fluent/fluentd-kubernetes-daemonset/master/fluentd-daemonset-elasticsearch.yaml

# 安装Elasticsearch和Kibana
kubectl apply -f https://raw.githubusercontent.com/elastic/elasticsearch/master/distribution/kubernetes/elasticsearch.yaml
kubectl apply -f https://raw.githubusercontent.com/elastic/kibana/master/distribution/kubernetes/kibana.yaml

Kubernetes安全

认证与授权

Kubernetes支持多种认证和授权机制,如X.509证书、Bearer Token、RBAC等,用于控制用户和服务的访问权限。

# rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: my-role
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list", "watch"]

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: my-role-binding
subjects:
- kind: User
  name: my-user
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: my-role
  apiGroup: rbac.authorization.k8s.io
# 创建RBAC角色和绑定
kubectl apply -f rbac.yaml

# 查看RBAC角色和绑定
kubectl get roles
kubectl get rolebindings

# 删除RBAC角色和绑定
kubectl delete role my-role
kubectl delete rolebinding my-role-binding

网络策略

Kubernetes的网络策略可以用于限制Pod之间的网络通信,从而提高集群的安全性。

# network-policy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: my-network-policy
spec:
  podSelector:
    matchLabels:
      app: my-app
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          role: frontend
    ports:
    - protocol: TCP
      port: 80
  egress:
  - to:
    - podSelector:
        matchLabels:
          role: backend
    ports:
    - protocol: TCP
      port: 3306
# 创建网络策略
kubectl apply -f network-policy.yaml

# 查看网络策略
kubectl get networkpolicies

# 删除网络策略
kubectl delete networkpolicy my-network-policy

Pod安全策略

Kubernetes的Pod安全策略(Pod Security Policy, PSP)可以用于限制Pod的权限,从而提高集群的安全性。

# psp.yaml
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: my-psp
spec:
  privileged: false
  seLinux:
    rule: RunAsAny
  supplementalGroups:
    rule: RunAsAny
  runAsUser:
    rule: RunAsAny
  fsGroup:
    rule: RunAsAny
  volumes:
  - '*'
# 创建Pod安全策略
kubectl apply -f psp.yaml

# 查看Pod安全策略
kubectl get psp

# 删除Pod安全策略
kubectl delete psp my-psp

Kubernetes常见问题与解决方案

  1. Pod无法启动

    • 检查Pod的日志:kubectl logs <pod-name>
    • 检查Pod的事件:kubectl describe pod <pod-name>
    • 检查资源配额和限制
  2. Service无法访问

    • 检查Service的配置:kubectl describe service <service-name>
    • 检查Pod的标签是否匹配Service的selector
    • 检查网络策略是否阻止了流量
  3. Deployment无法更新

    • 检查Deployment的事件:kubectl describe deployment <deployment-name>
    • 检查镜像版本是否正确
    • 检查资源配额和限制
  4. 集群资源不足

    • 检查节点的资源使用情况:kubectl top nodes
    • 调整资源配额和限制
    • 扩展集群节点
  5. 网络问题

    • 检查网络策略是否阻止了流量
    • 检查节点的网络配置
    • 检查DNS解析是否正常

总结

Kubernetes是一个功能强大的容器编排平台,它提供了丰富的功能和工具,用于管理容器化应用程序的生命周期。通过掌握Kubernetes的基本使用方法和高级功能,你可以有效地部署、扩展和管理应用程序,确保它们在高可用性、可扩展性和弹性的环境中运行。希望本文能够帮助你更好地理解和使用Kubernetes。

推荐阅读:
  1. k8s中tcp存活检测的使用方法
  2. k8s中httpget存活检测的使用方法

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

k8s

上一篇:Scrapy的基础知识是什么

下一篇:UPYUN有什么优点

相关阅读

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

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