标签(空格分隔): 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
安装各种分布式应用:
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
kubectl get pods -n kubernetes-dashboard
kubectl get pods,svc -n kubernetes-dashboard
创建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
----
打开web
https://172.16.10.11:30001