高效部署与运维多主机Kubernetes(K8s)集群是现代云计算环境中的关键技能。以下是一个详细的指南,涵盖了从集群部署到日常运维的各个方面。

1. 集群部署

1.1 环境选择

  • 硬件要求:根据业务需求确定CPU、内存和存储资源。
  • 操作系统:推荐使用CentOS 7或Ubuntu 18.04。
  • 网络:确保网络环境支持Pod之间的通信。

1.2 主机配置

  • 主机初始化:使用Ansible、Puppet或Chef等自动化工具初始化主机。
  • 网络配置:配置主机间的SSH免密登录,确保主机间可以互相通信。

1.3 安装K8s组件

  • 安装Docker:确保主机上安装了Docker。
  • 安装Kubeadm、Kubelet和Kubectl
    
    sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl
    curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
    cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
    deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
    EOF
    sudo apt-get update
    sudo apt-get install -y kubelet kubeadm kubectl
    sudo systemctl start kubelet && sudo systemctl enable kubelet
    

1.4 初始化Master节点

  • 执行kubeadm init
    
    sudo kubeadm init --pod-network-cidr=10.244.0.0/16
    
  • 获取kubeadm join命令
    
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    kubeadm token create --print-join-command
    

2. 部署网络插件

2.1 选择网络插件

  • Calico:基于BGP的路由和IPAM解决方案。
  • Flannel:简单、高效的Pod网络解决方案。
  • Weave:为容器提供跨主机通信的简单解决方案。

2.2 安装网络插件

  • 以Calico为例,安装Calico网络插件:
    
    kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
    

3. 部署应用

3.1 使用Deployment

  • 创建Deployment
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: nginx-deployment
    spec:
    replicas: 2
    selector:
      matchLabels:
        app: nginx
    template:
      metadata:
        labels:
          app: nginx
      spec:
        containers:
        - name: nginx
          image: nginx:latest
          ports:
          - containerPort: 80
    
  • 应用Deployment
    
    kubectl apply -f deployment.yaml
    

3.2 监控应用

  • 使用kubectl get pods查看Pod状态。
  • 使用kubectl logs <pod-name>查看Pod日志。

4. 高效运维

4.1 自动化运维

  • 使用Ansible、Puppet或Chef等自动化工具进行日常运维任务。
  • 使用Terraform或Ansible Tower等工具进行基础设施即代码管理。

4.2 监控与告警

  • 使用Prometheus和Grafana进行集群和应用监控。
  • 设置告警规则,以便在出现问题时及时通知运维人员。

4.3 故障恢复

  • 使用Kubernetes的自动恢复机制,如Pod、Node和Deployment的自愈能力。
  • 使用Kubernetes的扩缩容功能应对负载波动。

通过以上步骤,您将能够高效地部署与运维多主机K8s集群,确保应用程序的稳定性和可靠性。