Kubeadm 安装单节点 K8S

根据文档第一次简单安装k8s,简单记录下。

Kubeadm 安装完成之后所有虚拟机重启了下,各节点自动拉起,应该是脚本配置过了。 


文档地址

https://kuboard.cn/install/install-k8s.html#%E6%96%87%E6%A1%A3%E7%89%B9%E7%82%B9

 

一、环境配置准备

K8s 版本 1.18.0

centos 7.7-1908

Kuboard v1.0.x

 

 

1.1虚拟机准备

K8smaster 192.168.0.81          w102        2c     4g

K8snode1 192.168.0.82            w102        2c     4g

K8snode2 192.168.0.83            w102        4c     12g

K8snode3 192.168.0.84            w101        4c     8g

 

1.2配置hostname 本地host解析

# 修改 hostname

hostnamectl set-hostname your-new-host-name

# 查看修改结果

hostnamectl status

# 设置 hostname 解析

echo "127.0.0.1   $(hostname)" >> /etc/hosts

         1.3 配置防火墙  关闭防火墙(为了方便禁止防火墙)

                   查看防火墙  systemctl status firewalld.service

              关闭防火墙 systemctl stop firewalld.service

              启动防火墙 systemctl start firewalld.service

              禁止防火墙 systemctl disable firewalld.service

       1.4检查网络

              所有节点间ip互通,每台节点的默认网卡

              命令 ip route show   我的虚拟机默认ens33为默认网卡

default via 192.168.0.1 dev ens33 proto static metric 100

 

二、安装docker kubelet

Docker   nfs-utils kubectl  kubeadm  kubelet

master 节点和 worker 节点都要执行:

# 阿里云 docker hub 镜像

export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com

curl -sSL https://kuboard.cn/install-script/v1.18.x/install_kubelet.sh | sh -s 1.18.0

 

三、初始化master节点

 

1.初始化节点

                   注意:

APISERVER_NAME 不能是 master hostname

APISERVER_NAME 必须全为小写字母、数字、小数点,不能包含减号

POD_SUBNET 所使用的网段不能与 master节点/worker节点 所在的网段重叠。该字段的取值为一个 CIDR 值,如果您对 CIDR 这个概念还不熟悉,请仍然执行 export POD_SUBNET=10.100.0.1/16 命令,不做修改

        

         命令:

         # 只在 master 节点执行

# 替换 x.x.x.x master 节点实际 IP(请使用内网 IP

# export 命令只在当前 shell 会话中有效,开启新的 shell 窗口后,如果要继续安装过程,请重新执行此处的 export 命令

export MASTER_IP=192.168.0.81

# 替换 apiserver.demo 您想要的 dnsName

export APISERVER_NAME=apiserver.zkl

# Kubernetes 容器组所在的网段,该网段安装完成后,由 kubernetes 创建,事先并不存在于您的物理网络中

export POD_SUBNET=10.100.0.1/16

echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts

#echo "192.168.0.81 apiserver.zkl" >> /etc/hosts

 

curl -sSL https://kuboard.cn/install-script/v1.18.x/init_master.sh | sh -s 1.18.0

          

n  这里根据网速时间待定。

n  重新初始化 master 节点前,请先执行 kubeadm reset -f 操作

2.检查master 初始化结果

 

# 只在 master 节点执行

# 执行如下命令,等待 3-10 分钟,直到所有的容器组处于 Running 状态

watch kubectl get pod -n kube-system -o wide

# 查看 master 节点初始化结果

kubectl get nodes -o wide

 

四、初始化Worker节点(nodes

 

1.       获取join命令

# 只在 master 节点执行

kubeadm token create --print-join-command

 

可获取kubeadm join 命令及参数(有效期两个小时)如下所示:

 

kubeadm join apiserver.zkl:6443 --token zkmlzr.yah4yxaplhibdpsi     --discovery-token-ca-cert-hash sha256:1ca3b3b05ad43727194e173edb2ca59ae81dabbe4372bee235d22e242014aea6

 

获得worker初始化参数信息

 

2.       初始化worker

 

 

# 只在 worker 节点执行

# 替换 x.x.x.x master 节点的内网 IP

export MASTER_IP=192.168.0.81

# 替换 apiserver.demo 为初始化 master 节点时所使用的 APISERVER_NAME

export APISERVER_NAME=apiserver.zkl

echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts

 

# 替换为 master 节点上 kubeadm token create 命令的输出

kubeadm join apiserver.zkl:6443 --token zkmlzr.yah4yxaplhibdpsi     --discovery-token-ca-cert-hash sha256:1ca3b3b05ad43727194e173edb2ca59ae81dabbe4372bee235d22e242014aea6

 

3.       检查初始化结果

master上执行

kubectl get nodes -o wide

4.       移除worker节点并重试

# 只在 worker 节点执行

kubeadm reset –f

 

查看结果

# 只在 master 节点执行

kubectl get nodes -o wide

 

如果列表中没有您要移除的节点,则忽略下一个步骤

# 只在 master 节点执行

kubectl delete node demo-worker-x-x

 

 

 

 

 

五、安装 Ingress Controller

 

# 只在 master 节点执行

kubectl apply -f https://kuboard.cn/install-script/v1.18.x/nginx-ingress.yaml

 

 

 

 

六、重启集群(是个问题)

 

systemctl start kubelet

systemctl enable kubelet

 

七、安装Kuboard

1.安装与检查

1.1安装命令

kubectl apply -f https://kuboard.cn/install-script/kuboard.yaml

kubectl apply -f https://addons.kuboard.cn/metrics-server/0.3.6/metrics-server.yaml

 

         1.1 查看

kubectl get pods -l k8s.eip.work/name=kuboard -n kube-system

 

         结果:

[root@k8smaster ~]# kubectl get pods -l k8s.eip.work/name=kuboard -n kube-system

NAME                      READY   STATUS             RESTARTS   AGE

kuboard-8b8574658-msv42   0/1     ImagePullBackOff   0          3m48s

 

ready 0

         kubectl get pod -n kube-system -o wide 

    两种异常结果:

    1输出结果中出现 ImagePullBackoff 或者长时间处于 Pending 的情况

        请参考 查看镜像抓取进度

2输出结果中某个 Pod 长期处于 ContainerCreatingPodInitializing Init:0/3 的状态

    2.1 查看该 Pod 的状态,例如:

kubectl describe pod kuboard-8b8574658-q4lvf -n kube-system

如果输出结果中,最后一行显示的是 Pulling image,请耐心等待,或者参考 查看镜像抓取进度

2.2 将该 Pod 删除,系统会自动重建一个新的 Pod

kubectl delete pod kuboard-8b8574658-q4lvf -n kube-system

 

         查看镜像抓取进度

a)     确定问题 Pod 所在节点,以 kube-system 名称空间下的 Pod coredns-94d74667-6dj45 为例:

kubectl get pods coredns-94d74667-6dj45 -n kube-system -o wide

 

b) 确定 Pod 所使用的容器镜像:

kubectl get pods coredns-94d74667-6dj45 -n kube-system -o yaml | grep image:

 

结果:

image: registry.aliyuncs.com/google_containers/coredns:1.3.1

    image: registry.aliyuncs.com/google_containers/coredns:1.3.1

从这个结果中,我们得知,该 Pod 使用到了容器镜像 registry.aliyuncs.com/google_containers/coredns:1.3.1

 

c) Pod 所在节点执行 docker pull 指令:

docker pull registry.aliyuncs.com/google_containers/coredns:1.3.1

 

如果镜像标签没有问题,docker 指令将显示该镜像的下载过程,耐心等待即可。如果不能抓取 docker 镜像,请参考 Docker 命令的输出提示,做对应的处理

 

 

         2.卸载

kubectl delete -f https://kuboard.cn/install-script/kuboard.yaml

kubectl delete -f https://addons.kuboard.cn/metrics-server/0.3.6/metrics-server.yaml 

 

         3.获取Token

 

您可以获得管理员用户、只读用户的Token

         3.1管理员用户

 

         # 如果您参考 www.kuboard.cn 提供的文档安装 Kuberenetes,可在第一个 Master 节点上执行此命令

echo $(kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep kuboard-user | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d)

 

         3.2只读用户

 

3.2.1拥有的权限

view 可查看名称空间的内容

system:node 可查看节点信息

system:persistent-volume-provisioner 可查看存储类和存储卷声明的信息

 

3.2.2适用场景

 

只读用户不能对集群的配置执行修改操作,非常适用于将开发环境中的 Kuboard 只读权限分发给开发者,以便开发者可以便捷地诊断问题

 

                   3.2.3执行命令

 

# 如果您参考 www.kuboard.cn 提供的文档安装 Kuberenetes,可在第一个 Master 节点上执行此命令

echo $(kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep kuboard-viewer | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d

 

4.       访问kuboard

您可以通过NodePortport-forward 两种方式当中的任意一种访问 Kuboard

 

NodePort

 

Kuboard Service 使用了 NodePort 的方式暴露服务,NodePort 32567;您可以按如下方式访问 Kuboard

 

http://任意一个Worker节点的IP地址:32567/

 

输入前一步骤中获得的 token,可进入 Kuboard 集群概览页

 

TIP

 

如果您使用的是阿里云、腾讯云等,请在其安全组设置里开放 worker 节点 32567 端口的入站访问,

您也可以修改 Kuboard.yaml 文件,使用自己定义的 NodePort 端口号

 

                   port-forward

 

在您的客户端电脑中执行如下命令

kubectl port-forward service/kuboard 8080:80 -n kube-system

   

在浏览器打开链接 (请使用 kubectl 所在机器的IP地址)

http://localhost:8080

输入前一步骤中获得的 token,可进入 Kuboard 集群概览页

 

TIP

需要您先完成 从客户端电脑远程管理 Kubernetes 的配置

 

 

 



乐享:知识积累,快乐无限。