初识k8s,安装k8s,kubesphere一键安装

发布时间 2023-06-15 18:40:32作者: 不可丶结缘

 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台

官方k8s地址:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#before-you-begin

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可先卸载旧版
sudo yum remove docker \ docker
-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
5.2docker依赖的系统必要工具
yum install -y yum-utils device-mapper-persistent-data lvm2
 
5.3yum设置阿里源
yum-config-manager \
--add-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

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/

7.1.时区调整为上海

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