viva
  • 主页
  • 开发
    • IDE环境
      • Vim
      • VSCode
        • code-server
        • theia
    • Golang手册
    • Ansible
    • SaltStack
      • salt-api
    • Python
      • Q&A
      • Hello,world!
      • 类型
        • 数字
        • 字符串
        • 列表
        • 元组
        • 集合
        • 字典
      • 语法
        • 流程控制
        • 循环
      • 工具
        • pip
        • pyenv
        • selenium
      • 示例
    • Shell
    • Vue
      • ant-design
      • vue-material
    • Java
  • 随笔
    • WSL2
    • Git
    • Markdown
      • mermaid
    • Linux
      • 时钟同步
      • 账号
      • 文件
      • SSH
      • systemd
      • TLS加密
        • Openssl
      • 存储
        • rsync
        • NFS
      • 路由
      • 日志采集
        • Journalctl
        • Fluentd
          • 根据字段匹配对日志进行结构化
        • Logstash
    • 虚拟化
      • Hyper-V
      • PXE
    • 命令行工具
      • zsh
    • Nexus3
    • 堡垒机
      • JumpServer
    • 测试工具
      • ioping
      • apache bench
      • dd
      • postman
    • 开源项目管理
      • Github
    • 软件包管理
    • 网络镜像源
    • 网关
      • Nginx
  • 存储
    • Ceph
      • 安装
      • 故障处理
    • Etcd
    • Mysql
  • 网络
    • Overlay网络
    • IPVS
    • 网络工具
      • tshark
      • tcpdump
    • 防火墙
      • nftables
      • firewalld
      • iptables
    • 域名解析
      • dig
      • nslookup
      • dnsmasq
    • 代理
      • Clash
      • Redsocks
      • Redsocks2
      • COW
      • Proxfier
  • 云原生
    • 容器
      • Docker
        • Dockerfile
        • docker-compose
      • Podman
      • 原理
        • Chroot
        • Namespace
        • Cgroup
    • 镜像仓库
      • Harbor
    • Kubernetes
      • 部署
        • Kind
        • Minikube
        • kubespray
      • CNI
        • Flannel
        • OVS
        • Calico
      • Operator
        • OperatorSDK
      • StorageClass
      • Q&A
    • Openshift
      • 集群部署
      • 快速使用
    • Prometheus
      • prometheus-operator
      • kube-prometheus
      • Thanos
        • 组件
          • Bucket
          • Check
          • Compact
          • Querier
          • Receiver
          • Ruler
          • Sidecar
          • Store
        • 参考资料
      • Cortex
        • 组件
          • Alertmanager
          • Config
          • Distributor
          • Ingester
          • Querier
          • Query Frontend
          • Ruler
        • 参考资料
      • Thanos与Cortex方案对比
      • 参考资料
      • Q&A
    • Skywalking
    • Rook
    • Helm
    • Istio
    • 应用部署
      • Nexus
      • RabbitMQ
    • 参考资料
  • DevOps
    • 开源DevOps平台
    • CICD
      • Jenkins
    • 参考资料
  • 机器学习
    • Kubeflow
      • 示例
由 GitBook 提供支持
在本页
  • 项目地址
  • 快速开始
  • 通过 kubespray 镜像部署
  • 组件安装
  • kube-dashboard
  • metrics-server
  • helm
  • local-path-provisioner
  • 集群配置
  • 设置 dns上游
  • 离线安装
  1. 云原生
  2. Kubernetes
  3. 部署

kubespray

部署生产环境就绪的kubernetes集群

上一页Minikube下一页CNI

最后更新于2年前

项目地址

快速开始

前置步骤:

  • 关闭防火墙或配置服务器间的互信任策略

  • 系统时钟同步

  • ansible 节点到 k8s 节点的 ssh 免密登录

1、下载kubespray

git@github.com:kubernetes-sigs/kubespray.git && cd kubespray && git checkout release-2.15

2、安装python3与pip3

ubuntu环境

sudo apt install python3

centos7环境

sudo yum install python3

3、安装python依赖包

python3 -m pip install -r requirements.txt

如果已经通过其他方式安装过ansible,请先执行卸载,以确保ansible使用的是python3

4、复制示例配置

cp -rfp inventory/sample inventory/mycluster

5、编辑inventory清单

cat inventory/mycluster/inventory.ini

6、查看并编辑group_vars参数

cat inventory/mycluster/group_vars/all/all.yml
cat inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml

7、执行安装

ansible-playbook -i inventory/mycluster/hosts.yaml  --become --become-user=root cluster.yml

拉取k8s.gcr.io的镜像时可能会出错,建议预先从其他的镜像地址中先拉取好,在inventory/mycluster/hosts.yaml中配置download_always_pull: false避免重复拉取已经存在的镜像;

拉取gcr.io的镜像可以配置国内镜像源gcr_image_repo: registry.aliyuncs.com/

8、查看集群、节点以及 Pod 状态

kubectl cluster-info
kubectl get node -o wide
kubectl get pod -o wide

通过 kubespray 镜像部署

1、拉取 kubespray 代码

git@github.com:kubernetes-sigs/kubespray.git && \
cd kubespray && \
git checkout v2.19.0

2、拉取运行镜像

docker run --rm -it -v $(pwd)/inventory/sample:/inventory -v ${HOME}/.ssh/id_rsa:/root/.ssh/id_rsa quay.io/kubespray/kubespray:v2.19.0 bash

注意:运行 kubespray 容器的节点不能与 k8s 节点相同,否则部署中途 kubespray 容器会被中止。

3、编辑 inventory 清单

cat /inventory/inventory.ini

4、查看并编辑 group_vars 参数

cat /inventory/group_vars/all/all.yml
cat /inventory/group_vars/k8s-cluster/k8s-cluster.yml

5、执行集群部署

ansible-playbook -i /inventory/inventory.ini --private-key /root/.ssh/id_rsa cluster.yml

组件安装

kube-dashboard

1、配置 dashboard

inventory/mycluster/group_vars/k8s-cluster/addons.yml
dashboard_enabled: true
dashboard_token_ttl: 43200

2、安装 dashboard

ansible-playbook -i inventory/mycluster/hosts.yaml --tags "apps" --become --become-user=root cluster.yml

3、通过 NodePort 方式暴露 dashboard 服务

kubectl edit svc kubernetes-dashboard -n kube-system
apiVersion: v1
kind: Service
metadata:
  ...
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  ...
  ports:
  - nodePort: 30000
    port: 443
    protocol: TCP
    targetPort: 8443
  ...
  type: NodePort

4、创建集群管理用户

kubectl create sa admin -n kube-system
kubectl create clusterrolebinding --clusterrole='cluster-admin' --serviceaccount=kube-system:admin admin

5、通过浏览器访问 proxy 节点的 30000 端口,使用下方命令获取 token 登录 dashboard

kubectl get secret -n kube-system | grep admin | awk '{print $1}' | xargs kubectl -n kube-system get secret -o jsonpath='{.data.token}' | base64 --decode

metrics-server

1、配置 metrics-server

inventory/mycluster/group_vars/k8s-cluster/addons.yml
metrics_server_enabled: true

2、安装 metrics-server

ansible-playbook -i inventory/mycluster/hosts.yaml --tags "apps" --become --become-user=root cluster.yml

3、访问 dashboard 访问 pod 可看到运行指标

helm

1、配置 helm

inventory/mycluster/group_vars/k8s-cluster/addons.yml
helm_enabled: true

2、安装 helm

ansible-playbook -i inventory/mycluster/hosts.yaml --tags "apps" --become --become-user=root cluster.yml

3、在 [kube-master] 节点上可执行 helm 指令

local-path-provisioner

1、配置 local-path-provisioner

inventory/mycluster/group_vars/k8s-cluster/addons.yml
local_path_provisioner_enabled: true
local_path_provisioner_claim_root: /data/k8s/local-path-provisioner/
local_path_provisioner_image_tag: "v0.0.17"

2、安装 local-path-provisioner

ansible-playbook -i inventory/mycluster/hosts.yaml --tags "apps" --become --become-user

集群配置

设置 dns上游

1、配置 dns 使用主机 resolve.conf 并设置 dns 上游服务器地址

upstream_dns_servers:
- <ip>:<port>
resolvconf_mode: host_resolvconf

2、更新 dns

ansible-playbook -i inventory/mycluster/hosts.yaml --tags "apps,resolvconf" --

离线安装

在某些私有部署的场景下,无法连接互联网进行下载安装,这需要提前将安装所需的各种依赖资源下载到本地,方法如下:

GitHub - kubernetes-sigs/kubespray: Deploy a Production Ready Kubernetes ClusterGitHub
kubespray/offline-environment.md at master · kubernetes-sigs/kubesprayGitHub
Logo
Logo