标签(空格分隔): kubernetes系列


一:Sealos 的介绍

Sealos - 以 kubernetes 为内核的云操作系统发行版
    抛弃了传统的云计算架构,转向以 Kubernetes 为云内核的新架构,实现一个开源的、可
    随处运行的 AWS 替代方案

Sealos 是以 kubernetes 为内核的云操作系统发行版, 单机操作系统如同 linux 发行版本可以在上面
安装和使用各种单机应用,如 PPT,Word,Excel 等。 云操作系统只需要把这些单机应用替换成
各种云应用,如数据库,对象存储,消息队列等,就很容易理解了,这些应用都是分布式高可用的。 
Sealos 就是能支撑运行各种分布式应用的云操作系统。有了 Sealos 就拥有了一朵云。


安装条件

sealos 是一个简单的 go 二进制文件,可以安装在大多数 Linux 操作系统中。

以下是一些基本的安装要求:

每个集群节点应该有不同的主机名。 主机名不要带下划线。
所有节点的时间同步。
在 Kubernetes 集群的第一个节点上运行sealos run命令,目前集群外的节点不支持集群安装。
建议使用干净的操作系统来创建集群。不要自己装 Docker。
支持大多数 Linux 发行版,例如:Ubuntu CentOS Rocky linux。
支持 DockerHub 中支持的 Kubernetes 版本。
支持使用 containerd 作为容器运行时。
在公有云上请使用私有 IP。

系统: 
    CentOS7.9x64 

主机名:
     cat /etc/hosts 
  -----
     172.16.10.11    flyfish11
     172.16.10.12    flyfish12
     172.16.10.13    flyfish13
     172.16.10.14    flyfish14
     172.16.10.15    flyfish15
     172.16.10.16    flyfish16
     172.16.10.17    flyfish17
  -----

本次安装前4台,flyfish11 做为主节点/etcd 节点/work节点 
              flyfish12/flyfish13作为work节点
              flyfish14作为扩展的work节点
系统关闭selinux/firewalld 清空iptables 时间同步服务器 
yum -y install wget jq psmisc vim net-tools nfs-utils socat telnet yum-utils device-mapper-persistent-data lvm2 git network-scripts tar curl -y


# 关闭交换分区
sed -ri 's/.*swap.*/#&/' /etc/fstab
swapoff -a && sysctl -w vm.swappiness=0
 
cat /etc/fstab
# /dev/mapper/centos-swap swap                    swap    defaults        0 0
# 

## 关闭 SeLinux
# setenforce 0
# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
# 修改内核参数

yum -y install bridge-utils
modprobe br_netfilter
vim /etc/sysctl.conf
-----
net.ipv4.ip_forward = 1
net.ipv6.conf.all.disable_ipv6 = 1
net.bridge.bridge-nf-call-arptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
-----
sysctl -p 

cat <<EOF >> /etc/security/limits.conf
* hard nofile 655360
* soft nofile 655360
* hard nproc 655360
* soft nproc 655360
* soft core 655360
* hard core 655360
root hard nofile 655360
root soft nofile 655360

EOF


###系统依赖包
yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git

### 开启ipvs 转发
modprobe br_netfilter 

cat > /etc/sysconfig/modules/ipvs.modules << EOF 

#!/bin/bash 
modprobe -- ip_vs 
modprobe -- ip_vs_rr 
modprobe -- ip_vs_wrr 
modprobe -- ip_vs_sh 
modprobe -- nf_conntrack
EOF 

chmod 755 /etc/sysconfig/modules/ipvs.modules 

bash /etc/sysconfig/modules/ipvs.modules 

lsmod | grep -e ip_vs -e nf_conntrack




二:sealos 的安装

sudo cat > /etc/yum.repos.d/labring.repo << EOF
[fury]
name=labring Yum Repo
baseurl=https://yum.fury.io/labring/
enabled=1
gpgcheck=0
EOF
sudo yum clean all
sudo yum install sealos
离线环境只需要提前导入镜像,其它步骤与在线安装一致。

首先在有网络的环境中 save 安装包:

$ sealos pull labring/kubernetes:v1.25.0
$ sealos save -o kubernetes.tar labring/kubernetes:v1.25.0

拷贝 kubernetes.tar 到离线环境, 使用 load 命令导入镜像即可:

$ sealos load -i kubernetes.tar

剩下的安装方式与在线安装一致。

$ sealos images # 查看集群镜像是否导入成功
$ sealos run kuberentes:v1.25.0 --single # 单机安装,集群安装同理

自定义安装kuberentes:

sealos gen labring/kubernetes:v1.25.0 labring/helm:v3.8.2 labring/calico:v3.24.1 \
   --masters 172.16.10.11 \
   --nodes 172.16.10.12,172.16.10.13 --passwd 'flyfish225' > Clusterfile


准备镜像:
    sealos pull labring/kubernetes:v1.25.0
    sealos pull labring/helm:v3.8.2
    sealos pull labring/calico:v3.24.1

    sealos load -i labring/kubernetes:v1.25.0
    sealos load -i labring/helm:v3.8.2
    sealos load -i labring/calico:v3.24.1


安装集群:
      sealos run labring/kubernetes:v1.25.0 labring/helm:v3.8.2 labring/calico:v3.24.1 \
     --masters 172.16.10.11 \
     --nodes 172.16.10.12,172.16.10.13 -p flyfish225

image.png image.png image.png image.png image.png

安装各种分布式应用:
     sealos run labring/helm:v3.8.2 # install helm
     sealos run labring/openebs:v1.9.0 # install openebs
     sealos run labring/minio-operator:v4.4.16 labring/ingress-nginx:4.1.0 \
     labring/mysql-operator:8.0.23-14.1 labring/redis-operator:3.1.4 # oneliner


增加节点:

增加 node 节点:

$ sealos add --nodes 172.16.10.14,172.16.10.15

增加 master 节点:

$ sealos add --masters 172.16.10.16,172.16.10.17

删除节点
删除 node 节点:

$ sealos delete --nodes 172.16.10.14,172.16.10.15

删除 master 节点:

$ sealos delete --masters 172.16.10.16,172.16.10.17

清理集群
$ sealos reset

部署应用
# vim nginx.yaml
# cat nginx.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-test
spec:
  selector:
    matchLabels:
      app: nginx
      env: test
      owner: root
  replicas: 2 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: nginx
        env: test
        owner: root
    spec:
      containers:
        - name: nginx-test
          image: nginx:1.19.9
          ports:
            - containerPort: 80


# vim nginx-service.yaml
# cat nginx-service.yaml
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-test
  labels:
    run: nginx
spec:
  type: NodePort
  ports:
  - port: 80
    protocol: TCP
  selector:
    owner: root

部署一个dashboard

部署Dashboard

github:
https://github.com/kubernetes/dashboard/releases/tag/v2.7.0

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
目前最新版本v2.7.0 

vim recommended.yaml

----
spec:
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001
  type: NodePort
  selector:
    k8s-app: kubernetes-dashboard
----


kubectl apply -f recommended.yaml
下载镜像:
     sealos pull kubernetesui/dashboard:v2.7.0
     sealos pull kubernetesui/metrics-scraper:v1.0.8

image.png

image.png

kubectl get pods -n kubernetes-dashboard
kubectl get pods,svc -n kubernetes-dashboard

image.png

创建service account并绑定默认cluster-admin管理员集群角色:

vim dashadmin.yaml
-----
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard
-----

kubectl apply -f dashadmin.yaml
创建用户登录token
kubectl -n kubernetes-dashboard create token admin-user
----

eyJhbGciOiJSUzI1NiIsImtpZCI6Im5jZnlDUC0tdDlXX3l5UzN4Z1lTWTRVSGZfd3pNcEJHTWNTNEVSVnZDYWMifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNjgzNzA5NDE1LCJpYXQiOjE2ODM3MDU4MTUsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiMTExNDM1NDgtOGMyZS00OGM1LWI0MTQtNWJmYzRhZDJlYzQxIn19LCJuYmYiOjE2ODM3MDU4MTUsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbi11c2VyIn0.yARJs3lIlsAVru9iMeIhlhpHOz8v0m4P6JEGS9lvFa6WAKix3NhfCFR36Mrugqm3_39i4HuWANRDUh39qhFcxfQNi2b8b5DADK8oa5jqC6oTtZBBOvQwpLjvE-ZCn5kNJlZ6HMdyiJY-DnQq9jqm84U8V1bD-q6b3q3JeJIsNIeWoGY5kC-1G9ThQcjsWIcMcwjtl_fsREqyw8cTlmhJocuEwKRcr3p1KO3RgY-3gLAVA0P78F6l4Zov8FSlk_D4IAFEYXpYZT5afjopgCQM1HCDOmLElFVM-CLSUIhOvfdpaYnY4ZRFWJPwCc3-Lg9OOnb8SHR3RA9eVhH7V7Orkg
----

image.png


 打开web

https://172.16.10.11:30001

image.png image.png image.png