1.轻量级的容器系统是是现在的主流,但一个成熟的项目可能需要成百上千的应用(容器)来支撑,如此一来,大量分布在不同服务器上的容器就靠人工就非常难以管理,而 Kubernetes 的出现就是为了解决这个问题,它将大量的容器编排管理起来。
2.容器编排系统角逐历史
mesos apache 分布式资源管理框架 退出历史舞台
doker swarm 2019-07 阿里云docker swarm 剔除
退出历史舞台
kubernetes Google 10年容器化基础架构borg go语言
特点:
轻量级:消耗资源小
开源
弹性伸缩
负载均衡:IPVS
3.kubernertes 图形角色架构
1.master:服务器控制节点
2.node:服务器节点
3.kubelet:管理容器引擎,实现容器的生命周期管理,控制节点的主要服务
4.controller manager: 决策者,调度node点
5.API server :决策者的决策不会直接告诉工厂而是通过它来进行转达,同样地,工厂的情况也是通过它来转给决策者
6.scheduler:调度者,调度项目的执行
7.etcd:类似map形式的键值对数据库,存放集群的ip映射等信息
kube-proxy: 将规则些入iptables ,ipvs 实现服务映射
coredns:给集群SVC创建域名ip映射关系
dashboard: 给k8s集群提供B/S结构访问体系
ingress controller:官方只能实现4层代理,ingress可以实现7层代理
federation:提供跨集群中心多K8S统一管理功能
prometheus:提供k8s集群监控能力
hpa:pod自适应伸缩
4.k8s环境准备
k8s服务器最低要求配置2C2G,最少准备2台以上,一般建议3台
4.1主机原名
172.16.16.5 instance-emaeg9xj
172.16.16.4 instance-ocdh4khd
4.2.k8s 修改两台主机原名方便辨识,修改hostname以及hosts
vim /etc/hosts vim /etc/hostname #hosts,hostname 按节点对应修改 k8s-master k8s-worker
172.16.16.5 k8s-master
172.16.16.4 k8s-worker
[root@k8s-master ~]# cat /etc/hostname
172.16.16.5 k8s-master
#配置防火墙
#1.按照官方要求配置
#2.关闭防火墙服务
systemctl stop firewalld # 关闭服务
systemctl disable firewalld # 禁用服务
禁用SELinux
修改/etc/selinux/config
, 设置SELINUX=disabled
. 重启机器.
禁用交换分区
编辑/etc/fstab
, 将swap注释掉.
重启机器.
#重启 reboot -h
5.安装Docker
https://docs.docker.com/desktop/install/linux-install/
5.1若有旧版docker可先卸载旧版5.2docker依赖的系统必要工具 yum install -y yum-utils device-mapper-persistent-data lvm2 5.3yum设置阿里源 yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 5.4查看yum支持的docker版本 yum list docker-ce --showduplicates | sort -r 5.5.1安装docker sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin 5.5.2指定版本安装,建议安装指定版本 sudo yum install docker-ce-20.10.8 docker-ce-cli-20.10.8 containerd.io-20.10.8 docker-compose-plugin-20.10.8 5.6启动docker sudo systemctl start docker 5.7运行一个hello-world镜像验证docker安装启动成功 sudo docker run hello-world
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
6.安装Kubernetes
6.1添加源,由于国内网络原因, 官方文档中的地址不可用, 需要替换为阿里云镜像地址, 执行以下代码即可:
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg exclude=kube* EOF
6.2 安装(k8s)1.24版本后不默认配置dockerengine,此处安装k8s版本为1.23.6
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes 指定版本 yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6 --disableexcludes=kubernetes systemctl enable kubelet && systemctl start kubelet
修改k8s网络配置为集群网络
cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system
6.3以上操作各节点均需执行,以下操作只在Master节点生成k8s初始化文件
kubeadm config print init-defaults > kubeadm-init.yaml
kubeadm-init.yaml该文件有三处需要修改:
将advertiseAddress: 1.2.3.4
修改为本机地址
将imageRepository: k8s.gcr.io
修改为 imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
将nodeRegistration.name: node 修改为 nodeRegistration.name: k8s-master
下载k8s镜像,初始化k8s
[root@k8s-master ~]$ kubeadm config images pull --config kubeadm-init.yaml
[root@k8s-master ~]$ kubeadm init --config kubeadm-init.yaml
#初始化后执行如下配置指令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#初始化后控制台会有加入集群命令
#节点加入集群命令
kubeadm join 172.16.16.5:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:0f11bea2726c6814d7fb4b48d75ff27f7ada1770f1b8b79b1fed097256272f43
#若忘记命令可以重新生成加入集群命令显示在控制台
kubeadm token create --ttl 0 --print-join-command
6.4 安装好k8s后可查看k8s节点状态,将其他节点执行上叙加入集群命令则可看到加入节点状态
[root@k8s-master /]# kubectl get node NAME STATUS ROLES AGE VERSION node NotReady control-plane,master 4m43s v1.23.6
#主节点显示NotReady,执行清除污节点后可恢复正常
kubectl taint nodes --all node-role.kubernetes.io/master-
6.5k8s网络插件 calico
https://projectcalico.docs.tigera.io/getting-started/kubernetes/quickstart
#命令安装 Calico网络插件
wget https://docs.projectcalico.org/v3.23.3/manifests/calico.yaml
kubectl apply -f calico.yaml
#命令监控确认所有 pod 都在运行。
watch kubectl get pods --all-namespaces
6.6Dashboard(k8s面板)选装
#下载安装
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml
#查看kubernetes-dashboard 命名空间
kubectl get svc --namespace=kubernetes-dashboard
#修改kubernetes-dashboard service 外部可访问,将type: ClusterIP
改为type: NodePort
kubectl -n kubernetes-dashboard edit service kubernetes-dashboard
#查看service
kubectl -n kubernetes-dashboard get service kubernetes-dashboard
#配置登录,新建account.yaml
sudo vim account.yaml
#填充如下信息
# Creating a Service Account
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
# Creating a ClusterRoleBinding
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
#构建account.yaml
kubectl apply -f account.yaml
查看Dashboard 对外端口
kubectl -n kubernetes-dashboard get service kubernetes-dashboard
#Dashboard token在控制台获取
kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
#输入获取Dashboard token命名后控制台会显示如下类似token信息,可通过token登录Dashboard
eyJhbGciOiJSUzI1NiIsImtpZCI6IlJGemtRaHE2ZHlsb2VVN3BkUEZ3ZHZDUllfdkhrWUhHem5BMGN3X0J4ZDQifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLXg0d2JwIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIyOWU5NjU3OC1mYTQ0LTQwYTAtODczZi01NjE4ODBhMDI3ZjYiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.QS7YNyX24FPNOqS63ApIwEZg5bxaTwHdqmYM5hW3VEGuMIUHgP-qk1wk8lGvWHy9O0rNqFRf9wzxQJcI2dGH1vRiludxMwspzD9XpfbuA9p0hlioadOwHy590ZZBr-n64nSxtFGjGT6b6_W4ILK6HX-VG7rSd7_XAfQKtp9zaf_0zofhS7VQWjrwE9c6BaY2tgBPAOyChILFDJH2whyKWX293W_txPuJLGnUyCrBmOcfNIIzTolgqTN0lpxdPnTp4BUSJB5wspdfFKht-C4qNfC_HY06vWELpCQjateUIRngndn2CRxwyab2OzR600vpFEXVy_OXO2gUUu-HCXij9w
7.以上为k8s的官方原始安装方式,下叙为一键安装方式kubesphere一键安装方式
https://kubesphere.io/zh/docs/v3.3/quick-start/all-in-one-on-linux/
sudo timedatectl set-timezone "Asia/Shanghai"
Linux下防火墙有两种分别是iptables和firewalld,在centos7之前centos用的防火墙是iptables,自从centos7过后防火墙的使用就从iptables变成了firewalld。
7.2.关闭防火墙
systemctl stop firewalld #临时关闭
systemctl disable firewalld #永久关闭,即设置开机的时候不自动启动
7.3.下载kubekey
export KKZONE=cn
curl -sfL https://get-kk.kubesphere.io | VERSION=v3.0.7 sh -
7.3.1.为 kk
添加可执行权限:
chmod +x kk
7.3.2 创建集群
./kk create config [--with-kubernetes version] [--with-kubesphere version] [(-f | --file) path]
./kk create config --with-kubernetes v1.21.5 --with-kubesphere v3.2.1 -f config-sample.yaml
3.3 编辑配置文件 config-sample.yaml
spec:
hosts:
- {name: master, address: 192.168.0.2, internalAddress: 192.168.0.2, user: ubuntu, password: Testing123}
- {name: node1, address: 192.168.0.3, internalAddress: 192.168.0.3, user: ubuntu, password: Testing123}
- {name: node2, address: 192.168.0.4, internalAddress: 192.168.0.4, user: ubuntu, password: Testing123}
roleGroups:
etcd:
- master
control-plane:
- master
worker:
- master
- node1
- node2
controlPlaneEndpoint:
domain: lb.kubesphere.local
address: ""
port: 6443
7.3.4添加docker 加速器地址
docker依赖的系统必要工具
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
7.3.5 使用配置文件创建集群
./kk create cluster -f config-sample.yaml
7.3.5.1 报错问题
安装如下插件
yum install -y conntrack && yum install -y socat
然后继续执行3.5 配置文件创建集群
访问如下地址即可进入kubesphere面板
Console: http://192.168.0.232:30880
Account: admin Password: P@88w0rd
图片参考:
https://juejin.cn/post/7239279470249754679
https://juejin.cn/post/7217410854844383291
标签:kubernetes,--,kubesphere,yum,master,docker,k8s,安装 From: https://www.cnblogs.com/zh9311/p/17479802.html