您的位置:

k8s安装详解

一、k8s安装要求

在进行k8s安装前,需要确保满足以下硬件要求:

1、至少3台物理机器或虚拟机;

2、每台机器至少拥有2核CPU,4GB内存,20 GB硬盘空间;

3、所有机器之间需要互通,可利用SSH互相登录,并确保防火墙允许k8s所需端口的通信。

另外,推荐选择OS为Ubuntu 18.04或CentOS 7的机器。

二、k8s安装grafana

Grafana是一款开源的指标监控系统,常用于k8s的监控。下面是grafana在k8s中的安装过程:

1、首先需要在k8s中启动一个grafana实例,可以使用以下命令:

kubectl apply -f https://raw.githubusercontent.com/grafana/helm-charts/main/charts/grafana/values.yaml
kubectl apply -f https://raw.githubusercontent.com/grafana/helm-charts/main/charts/grafana/templates/deployment.yaml

2、等待grafana实例启动后,可以通过NodePort或LoadBalancer的方式对外暴露服务,比如以下例子使用NodePort方式:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: grafana
  name: grafana-service
spec:
  selector:
    app: grafana
  ports:
  - name: http
    nodePort: 30800
    port: 80
    protocol: TCP
    targetPort: http
  type: NodePort

3、访问grafana的NodePort地址,即可开始配置grafana的数据源和监控面板。

三、k8s安装mysql

Mysql是一款流行的开源关系型数据库,常常用于k8s应用的存储。下面是在k8s中安装mysql的过程:

1、首先需要在k8s中启动mysql实例,可以执行以下命令:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: mysql
  name: mysql-db
spec:
  ports:
  - port: 3306
    targetPort: 3306
  selector:
    app: mysql
  type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: mysql
  name: mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql	
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - env:
        - name: MYSQL_ROOT_PASSWORD
          value: mysql_password
        - name: MYSQL_USER
          value: mysql_user
        - name: MYSQL_PASSWORD
          value: mysql_password
        name: mysql
        image: mysql:5.7
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - mountPath: /var/lib/mysql
          name: mysql-persistent-storage
       volumes:
       - name: mysql-persistent-storage
         persistentVolumeClaim:
           claimName: mysql-pvc

2、等待mysql实例启动后,可以通过client连接到mysql,使用以下命令:

kubectl run -it --rm --image=mysql:5.7 --restart=Never mysql-client -- mysql -h mysql-db -p

3、连接到mysql后,即可执行相关的SQL语句,进行数据库的管理和操作。

四、k8s安装ingress

Ingress是一个k8s内置的服务,可以实现对外暴露服务的功能。下面是在k8s中安装Ingress的过程:

1、首先需要在k8s中启用Ingress服务,可以执行以下命令:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.0/deploy/static/provider/cloud/deploy.yaml

2、等待Ingress服务启动后,需要定义Ingress规则,比如以下例子:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ingress
spec:
  rules:
  - host: test.example.com
    http:
      paths:
      - path: /hello
        pathType: Prefix
        backend:
          service:
            name: hello-world
            port:
              name: http

3、根据Ingress规则,可以通过外部域名或IP访问k8s中的服务。

五、k8S安装Saleor

Saleor是一个流行的开源电商平台,可以在k8s中进行安装和部署。下面是在k8s中安装Saleor的过程:

1、首先需要在k8s中启用PostgreSQL数据库实例和Redis缓存实例,可以使用以下命令:

kubectl apply -f https://gist.githubusercontent.com/maurodelazeri/5cf84ba75a54f9596d62c4b2f19de573/raw/bd5f29c6d61b1145f66eb973952150f5b5ad6e55/postgresql.yaml
kubectl apply -f https://gist.githubusercontent.com/maurodelazeri/5cf84ba75a54f9596d62c4b2f19de573/raw/bd5f29c6d61b1145f66eb973952150f5b5ad6e55/redis.yaml

2、等待PostgreSQL和Redis实例启动后,需要设置相应的环境变量和配置文件,例如以下Saleor部署文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: saleor-example
spec:
  replicas: 1
  selector:
    matchLabels:
      app: saleor
  template:
    metadata:
      labels:
        app: saleor
    spec:
      containers:
      - env:
        - name: ALLOWED_HOSTS
          value: '["example.com", "www.example.com"]'
        - name: DEBUG
          value: 'false'
        - name: DATABASE_URL
          value: 'postgres://saleor:password@postgres:5432/saleor'
        - name: REDIS_URL
          value: 'redis://redis:6379/1'
        - name: SECRET_KEY
          value: 'supersecretkey'
        - name: DEFAULT_CURRENCY
          value: 'USD'
        - name: DEFAULT_EMAIL_FROM
          value: 'no-reply@example.com'
        image: saleor/saleor:latest
        name: saleor
        ports:
        - containerPort: 80
          name: http
        volumeMounts:
        - mountPath: /home/node/saleor
          name: saleor-data
      volumes:
      - name: saleor-data
        persistentVolumeClaim:
          claimName: saleor-pvc

3、Saleor应用程序将自动加载,可以使用外部域名或IP访问。

六、k8s安装方式对比

对于k8s的安装,有多种方案可供选择,以下是几种常见的安装方式:

1、手动安装

使用手动方式,可以深入了解k8s的安装过程和原理,但需要耗费大量的时间和精力。

2、使用包管理器安装

可以使用包管理器,比如官方推荐的kubeadm,快速地完成k8s的安装。

3、使用自动化工具安装

k8s的生态系统非常强大,有许多自动化工具可供选择,比如Helm、RKE等,可以快速地完成k8s的安装和管理。

七、k8S安装教程

下面是一个kubeadm方式安装k8s集群的示例:

1、首先确保机器满足k8s的要求,执行以下命令来安装kubeadm、kubelet和kubectl:

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

   

2、使用kubeadm初始化集群:

kubeadm init --pod-network-cidr=10.244.0.0/16

3、等待k8s集群初始化完成后,使用以下命令将kubernetes配置复制到普通用户的目录中:

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

4、配置网络插件,比如使用flannel:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

5、启用worker节点,可以通过以下命令获取加入节点的token和hash:

kubeadm token list | awk 'END{print $1}'
kubeadm token create TOKEN --print-join-command

6、在要加入集群的worker节点上执行上面获取到的join命令即可。

八、rke安装k8s

下面是一个使用RKE安装k8s集群的示例:

1、首先需要在所有节点上安装rke二进制文件:

curl -L https://github.com/rancher/rke/releases/download/v0.3.2/rke_linux-amd64 -o /usr/local/bin/rke
chmod +x /usr/local/bin/rke

2、定义集群配置,比如以下yaml:

nodes:
  - address: node1.example.com
    user: ubuntu
    role: controlplane,etcd
  - address: node2.example.com
    user: ubuntu
    role: worker
  - address: node3.example.com
    user: ubuntu
    role: worker
services:
  etcd:
    snapshot: true
    creation: 6h
    retention: 24h
    backup_config:
      interval_hours: 2
      S3:
        region: us-west-2
        bucket: rke-backups
        access_key: accesskey
        secret_key: secretkey
        endpoint: https://s3.us-west-2.amazonaws.com
        folder: backup-timestamp
  kube-controller:
    cluster_cidr: 10.0.0.0/16
    service_cluster_ip_range: 10.43.0.0/16
  kubelet:
    fail_swap_on: false
  kubeproxy:
    mode: ipvs
addons:
  als:
    enable: true

3、使用rke创建k8s集群:

rke up

4、等待k8s集群创建完成后,可以使用kubectl等工具来管理集群。