2、K8S集群安装、可视化管理组件安装
全部文章导航
1、准备工作
1、使用xsheel或Putty命令行工具连接4台虚拟机
新建连接,设置连接、身份信息:
连接完成:
2、设置hosts
# 编辑hosts文件
vi /etc/hosts
# 127.0.0.1添加本机hostname和k8s.free.com
# 添加其他虚拟机的ip和hostname
192.168.110.102 free2
192.168.110.103 free3
192.168.110.104 free4
192.168.110.100 k8s.free.com # k8s master域名为k8s.free.com,固定解析到192.168.110.100
2、k8s安装
1、系统设置(所有节点)
# 禁用防火墙,虚拟机安装时已经执行
sudo systemctl stop firewalld & systemctl disable firewalld
# 禁用SELINUX,修改配置文件、确保重启后也禁用
sudo setenforce 0
sudo sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
# 禁用swap
sudo swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# 配置内核参数,将桥接的IPv4流量传递到iptables的链
sudo bash -c 'cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF'
sysctl --system
2、添加yum源(所有节点)
# 添加基础源
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
# 添加K8S安装源
sudo bash -c 'cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF'
3、安装Docker(所有节点)
# 安装yum依赖包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 net-tools
# 设置源
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 查看最近20个可安装docker-ce版本清单
yum list docker-ce --showduplicates | tail -n 20
# 安装指定版本docker
sudo yum -y install docker-ce-3:20.10.8-3.el8
# centos 8遇到 problem with installed package buildah-1.19.7-1.module_el8.4.0+781+acf4c33b.x86_64 问题
# 方法1 执行yum erase podman buildah 再执行 yum -y install docker-ce
# 设置开机启动
sudo systemctl enable docker
sudo systemctl start docker
# 追加命令参数,native.cgroupdriver=systemd
sudo vi /usr/lib/systemd/system/docker.service
ExecStart命令追加: --exec-opt native.cgroupdriver=systemd
#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd
# 重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
4、kubelet、kubeadm、kubectl安装
1、所有节点(free1、free2、free3)安装kubelet、kubeadm、kubectl
# 安装kubectl、kubelet、kubeadm,设置kubelet开机启动,启动kubelet。
# 安装最新版本 sudo yum install -y kubectl kubelet kubeadm
# 安装指定版本
sudo yum install -y kubectl-1.22.2-0 kubelet-1.22.2-0 kubeadm-1.22.2-0
# 设置开机启动
sudo systemctl enable kubelet
sudo systemctl start kubelet
# 查看K8S版本-See
kubeadm version
kubectl version --client
kubelet --version
2、master(free1)节点初始化:
# 参考资料: https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/
# 创建初始化配置文件
sudo kubeadm config print init-defaults --kubeconfig ClusterConfiguration > /home/free1/bin/kubeadm-master-config.yaml
# 修改配置文件
vim /home/free1/bin/kubeadm-master-config.yaml
kubeadm-master-config.yaml配置文件内容:
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 192.168.110.100 # 本机Ip
bindPort: 6443
nodeRegistration:
criSocket: /var/run/dockershim.sock
imagePullPolicy: IfNotPresent
name: node
taints: null
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: "192.168.110.100:6443" # 搭建多master高可用时,可设置为Vip地址
controllerManager: {}
dns: {}
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers # 设置阿里云镜像地址
kind: ClusterConfiguration
kubernetesVersion: 1.22.1
networking:
dnsDomain: cluster.local
podSubnet: 12.16.0.0/16 # Pod网段
serviceSubnet: 12.26.0.0/16 # Service网段
scheduler: {}
修改好配置文件后继续执行:
# 查看所需镜像列表 -See
sudo kubeadm config images list --config /home/free1/bin/kubeadm-master-config.yaml
# 拉取镜像
sudo kubeadm config images pull --config /home/free1/bin/kubeadm-master-config.yaml
# 初始化
sudo kubeadm init --config /home/free1/bin/kubeadm-master-config.yaml
# 异常处理1:registry.aliyuncs.com/google_containers/coredns:v1.8.{v} not found
# 参考:https://blog.csdn.net/a749227859/article/details/118732605
sudo docker pull registry.aliyuncs.com/google_containers/coredns:1.8.{v}
sudo docker tag registry.aliyuncs.com/google_containers/coredns:1.8.{v} registry.aliyuncs.com/google_containers/coredns:v1.8.{v}
sudo docker rmi registry.aliyuncs.com/google_containers/coredns:1.8.{v}
# 出现异常重新执行
# 如果提示文件存在、端口占用,可以先执行: kubeadm reset
# kubeadm init --config=/home/free1/bin/kubeadm-master-config.yaml
# 成功则看到输出结果 -See
# kubeadm join 192.168.110.100:6443 --token r6wxwf.myqvaa2y66xbici3 \
# --discovery-token-ca-cert-hash sha256:84851513d6a871456260507d445a3db174fb4ba5864f68304d07f5636f0b309f
# 为普通用户添加 kubectl 运行权限,需要使用普通用户身份执行,echo $HOME打印$HOME变量,$HOME=/home/free1
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
2、master(free1)安装calico网络
# 查看Node 和 Pod -See
kubectl get node
kubectl get pod --all-namespaces
# 查看日志 -See
journalctl -f
# 安装calico网络
sudo kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
3、从节点(free2、free3)加入集群
# 参考资料: https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm-join/
# 创建加入token,输出从节点加入命令行
sudo kubeadm token create --print-join-command
# node 节点添加,使用kubeadm token create --print-join-command 会输出加入集群指令
sudo kubeadm join 192.168.110.100:6443 --token 81dals.6uy35dwbae4xwi39 --discovery-token-ca-cert-hash sha256:84851513d6a871456260507d445a3db174fb4ba5864f68304d07f5636f0b309f
3、可视化管理界面安装(可以只安装Kuboard)
方式1:官方的dashboard安装
# 下载
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.1/aio/deploy/recommended.yaml
# 找到配置文件如下内容
# 修改配置文件部分内容结束 --Tag3
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
type: NodePort #添加
ports:
- port: 443
targetPort: 8443
nodePort: 31089 # 添加
selector:
k8s-app: kubernetes-dashboard
# 修改配置文件部分内容结束 --Tag3
# 然后创建POD
sudo kubectl apply -f recommended.yaml
# 查看kubernetes-dashboard -See
sudo kubectl get svc -n kubernetes-dashboard
# 创建TOKEN
sudo kubectl create sa dashboard-admin -n kube-system
# 授权TOKEN 访问权限
sudo kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
2、访问https://192.168.110.100:31089/,192.168.110.100可以为集群任意节点Ip。
3、在master服务器执行获取TOKEN
# 获取TOKEN
ADMIN_SECRET=$(kubectl get secrets -n kube-system | grep dashboard-admin | awk '{print $1}')
DASHBOARD_LOGIN_TOKEN=$(kubectl describe secret -n kube-system ${ADMIN_SECRET} | grep -E '^token' | awk '{print $2}')
echo ${DASHBOARD_LOGIN_TOKEN}
4、登录访问管理界面
方式2:Kuboard安装
1、安装kuboard
# 安装Kuboard-v3版本。参考: https://kuboard.cn/install/v3/install-in-k8s.html#%E5%AE%89%E8%A3%85
sudo kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3.yaml
2、登录后台:
http://192.168.110.100:30080
用户名: admin
密 码: Kuboard123
3、安装kuboard-agent
curl -k 'http://192.168.110.100:30080/kuboard-api/cluster/default/kind/KubernetesCluster/default/resource/installAgentToKubernetes?token=BpLnfgDsc2WD8F2qNfHK5a84jjJkwzDk' > kuboard-agent.yaml
sudo kubectl apply -f ./kuboard-agent.yaml
4、安装metrics-server,可以查看详细资源详细:
参考资料
https://www.cnblogs.com/guarderming/p/12876877.html#_label2
https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/
Kubectl Init说明
# 初始化 Control-plane/Master 节点
kubeadm init \
--apiserver-advertise-address 0.0.0.0 \
# API 服务器所公布的其正在监听的 IP 地址,指定“0.0.0.0”以使用默认网络接口的地址
# 切记只可以是内网IP,不能是外网IP,如果有多网卡,可以使用此选项指定某个网卡
--apiserver-bind-port 6443 \
# API 服务器绑定的端口,默认 6443
--cert-dir /etc/kubernetes/pki \
# 保存和存储证书的路径,默认值:"/etc/kubernetes/pki"
--control-plane-endpoint kuber4s.api \
# 为控制平面指定一个稳定的 IP 地址或 DNS 名称,
# 这里指定的 kuber4s.api 已经在 /etc/hosts 配置解析为本机IP
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
# 选择用于拉取Control-plane的镜像的容器仓库,默认值:"k8s.gcr.io"
# 因 Google被墙,这里选择国内仓库
--kubernetes-version 1.17.3 \
# 为Control-plane选择一个特定的 Kubernetes 版本, 默认值:"stable-1"
--node-name master01 \
# 指定节点的名称,不指定的话为主机hostname,默认可以不指定
--pod-network-cidr 10.10.0.0/16 \
# 指定pod的IP地址范围
--service-cidr 10.20.0.0/16 \
# 指定Service的VIP地址范围
--service-dns-domain cluster.local \
# 为Service另外指定域名,默认"cluster.local"
--upload-certs
# 将 Control-plane 证书上传到 kubeadm-certs Secret
节点重新加入
# master执行: 查看节点信息
kubectl get node
# master执行: 移除节点
kubectl delete node free2
# 需要重新加入的节点执行: 还原
kubeadm reset
# master执行: 创建加入命令信息
kubeadm token create --print-join-command
#输出 kubeadm join 192.168.110.100:6443 --token htz1im.7fks98dckd7d1fk5 --discovery-token-ca-cert-hash sha256:84851513d6a871456260507d445a3db174fb4ba5864f68304d07f5636f0b309f
# 需要重新加入的节点执行: 加入集群,使用kubeadm token create --print-join-command输出结果执行
kubeadm join 192.168.110.100:6443 --token htz1im.7fks98dckd7d1fk5 --discovery-token-ca-cert-hash sha256:84851513d6a871456260507d445a3db174fb4ba5864f68304d07f5636f0b309f --control-plane --certificate-key 0d7b787ab042c41e33ef28fd5341313cb5cc7ce5b7307dcb7921c4f370a9c31d
多个master节点加入集群
master节点加入时,多了control-plane和certificate-key。certificate-key可以使用sudo kubeadm init phase upload-certs进行生成。
# master执行: 创建加入命令信息
kubeadm token create --print-join-command
# master节点创建certs
sudo kubeadm init phase upload-certs --upload-certs # 输出 certificate-key
# 做为master加入
kubeadm join 192.168.110.100:6443 --token wo2fkk.1oghvayals80h74i --discovery-token-ca-cert-hash sha256:b9dc272830b34813e289f88d354f7c513795f42e95278654f66c557954cb46cb --control-plane --certificate-key 81b1b4ed1634dae0583b8d433abfa593eccb9716a332edd894f6285580996928
重新设置controlPlaneEndpoint
# 删除证书
rm /etc/kubernetes/pki/apiserver.*
# 重新初始化配置
kubeadm init phase certs apiserver --config=/home/free1/bin/kubeadm-master-config.yaml
重新初始化集群
# 删除用户执行的证书文件
rm -rf $HOME/.kube
# 重新添加
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
独立之精神,自由之思想