2、K8S集群安装、可视化管理组件安装

全部文章导航

点此查看K8S、Jenkins持续集成环境搭建全部文章

1、准备工作

1、使用xsheel或Putty命令行工具连接4台虚拟机

新建连接,设置连接、身份信息:

image-20210915112752862

连接完成:

image-20210915112617997

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

image-20210915113140391

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。

image-20210922164157348

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、登录访问管理界面

image-20210922164453858

方式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

image-20210923110505435

4、安装metrics-server,可以查看详细资源详细:

image-20210923110722928

image-20210916110049273

参考资料

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

posted @ 2021-10-15 08:56  江边飞鸟  阅读(840)  评论(0编辑  收藏  举报