K8S初级入门系列之二-集群搭建

news2024/11/18 5:58:00

一、前言

    为了更好学习K8S,建议自行搭建一套K8S的环境,目前比较流行的有两种搭建工具,一种是单机版的minkube,一种是集群版的kubeadm。minkube更多是用于实验环境,且单机版隐藏了很多细节,而kubeadm更贴近实际生产环境,且搭建也较简单,所以本案就选择kubeadm。

二、环境规划

1、服务器规划

      建议最小硬件配置2C2G20G,服务器能访问外网,需要拉取镜像。这里使用百度云的2台云服务器BCC,其配置规划如下:

服务器名称节点类型操作系统硬件配置ip
k8s-masterMaster

CentOS Linux release 8.4.2105

(内核:4.18.0-348.7.1.el8_5.x86_64)

2C4G80G192.168.16.4
k8s-node1Worker

CentOS Linux release 8.4.2105

(内核:4.18.0-348.7.1.el8_5.x86_64)

2C4G80G10.0.0.4

一般情况下,这两台机器位于同一个ip段,但也不是强制要求,只有网络能通即可。

2、软件规划

软件版本
Docker20.10.21
Kubernetes1.23

三、安装

1、安装前准备

(1)修改主机名

按照规划的节点修改主机名,可以直接在百度云服务控制台上修改,也可以使用命令修改。

1)查看当前的主机名

[root@kubernetes01 ~]# hostname
kubernetes01

2)修改主机名

[root@kubernetes01 ~]# hostnamectl set-hostname k8s-master
[root@kubernetes01 ~]# hostname
k8s-master

3)修改/etc/hosts

[root@kubernetes01 ~]# vi /etc/hosts

修改如下信息并保存

192.168.16.4 k8s-master k8s-master

最终的结果如下:

[root@kubernetes01 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.16.4 k8s-master k8s-master

(2)关闭防火墙

      firewalld会影响Docker的网络功能,要提前禁掉。

[root@k8s-master ~]# systemctl stop firewalld && systemctl disable firewalld

(3)关闭selinux

    SELinux是2.6+版本的Linux内核中提供的强制访问控制系统,在很大程度上加强了Linux的安全性,但是它会影响Kubernetes的某些组件功能,所以我们需要在安装部署前将其禁用掉。

1)关闭selinux

关闭selinux有两种方式

#1、临时关闭
setenforce 0
#2、永久关闭
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

这里使用临时关闭

[root@k8s-master ~]# setenforce 0
setenforce: SELinux is disabled

2)修改后可以检查下状态

[root@k8s-master ~]# sestatus
SELinux status:                 disabled

(4)关闭swap分区

为了提升性能,建议关闭swap分区

1)关闭分区

同样关闭分区也有两种方式

#临时关闭
swapoff -a
#永久关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab

这里使用临时关闭

[root@k8s-master ~]# swapoff -a

2)检查是否都已经关闭,swap一行都为0表示关闭。

[root@k8s-master ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3920         276        3045           2         597        3421
Swap:             0           0           0

(5)编写kubernetes.conf配置,配置内核参数

1)编辑kubernetes.conf

[root@k8s-master ~]# vim /etc/sysctl.d/kubernetes.conf

填写如下内容

net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1    
vm.swappiness=0
  • 参数说明:

--net.bridge.bridge-nf-call-iptables=1:开启ipv4的过滤规则。
--net.bridge.bridge-nf-call-ip6tables=1:开启iptables中ipv6的过滤规则。
--net.ipv4.ip_forward=1:开启服务器的路由转发功能。
--vm.swappiness=0:禁止使用swap 空间,只有当系统OOM 时才允许使用它。

2)加载所有配置项

[root@k8s-master ~]# sysctl --system

2、安装Master节点

(1)安装docker

1)配置阿里云的docker源

[root@k8s-master ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
--2022-11-01 22:37:41--  https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Resolving mirrors.aliyun.com (mirrors.aliyun.com)... 61.240.128.243, 61.240.128.240, 61.240.128.238, ...
Connecting to mirrors.aliyun.com (mirrors.aliyun.com)|61.240.128.243|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2081 (2.0K) [application/octet-stream]
Saving to: 鈥etc/yum.repos.d/docker-ce.repo鈥

/etc/yum.repos.d/docker-ce.repo                100%[==================================================================================================>]   2.03K  --.-KB/s    in 0s      

2022-11-01 22:37:41 (47.9 MB/s) - 鈥etc/yum.repos.d/docker-ce.repo鈥saved [2081/2081]

2)安装docker相关版本

可以按照指定版本,也可以不指定安装最新版本

#安装指定版本
yum install -y docker-ce-20.10.21 docker-ce-cli-20.10.21 containerd.io
#或者安装最新版本
yum install -y docker-ce docker-ce-cli containerd.io

这里我们安装最新版本

[root@k8s-master ~]# yum install -y docker-ce docker-ce-cli containerd.io
Docker CE Stable - x86_64                                                                                                                                  44 kB/s |  31 kB     00:00    
Dependencies resolved.
....
...
Complete!

整个过程会持续1-2分钟。

3) 启动docker并设置docker开机自启

[root@k8s-master ~]# systemctl enable docker && systemctl start docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service 鈫/usr/lib/systemd/system/docker.service.

4)查看版本号

[root@k8s-master ~]# docker --version 
Docker version 20.10.21, build baeda1f

5)配置daemon.json

编辑daemon.json

[root@k8s-master ~]# vim /etc/docker/daemon.json

填写以下内容

{ 	
	"exec-opts": ["native.cgroupdriver=systemd"], 	
	"registry-mirrors": ["https://tl522tpb.mirror.aliyuncs.com"]
}
  • 参数说明:

--exec-opts,运行时执行选项,docker驱动默认为cgroupfs,需要和k8s保持一致,修改为systemd

--registry-mirrors,阿里的容器加速地址,可以在阿里云->容器镜像服务->镜像加速器,找到属于自己账号的加速器,当然也可以使用本例提供的这个,目前是不收费的。获取教程可以参考:Docker入门到实践 (一) docker简介与安装_零碎de記憶的博客-CSDN博客

加载配置并重启服务

[root@k8s-master ~]# systemctl daemon-reload
[root@k8s-master ~]# systemctl restart docker

(2)安装kubelet kubeadm kubectl

1)配置阿里云的Kubernetes源

编辑kubernetes.repo文件

[root@k8s-master ~]# vim /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=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  • 参数说明:

--enable=1:表示启用这个源
--gpgcheck=1:表示对这个源下载的rpm包进行校验
--repo_gpgcheck=0:某些安全性配置文件会在 /etc/yum.conf 内全面启用 repo_gpgcheck,以便能检验软件库中数据的加密签署,如果repo_gpgcheck设置为1,会进行校验。

2)安装指定版本

[root@k8s-master ~]# yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
....
Complete!

整个过程会持续1-2分钟。

3)检查版本安装是否正确

[root@k8s-master ~]# kubelet --version
Kubernetes v1.23.0
[root@k8s-master ~]# kubectl version
Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.0", GitCommit:"ab69524f795c42094a6630298ff53f3c3ebab7f4", GitTreeState:"clean", BuildDate:"2021-12-07T18:16:20Z", GoVersion:"go1.17.3", Compiler:"gc", Platform:"linux/amd64"}
The connection to the server localhost:8080 was refused - did you specify the right host or port?
[root@k8s-master ~]# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.0", GitCommit:"ab69524f795c42094a6630298ff53f3c3ebab7f4", GitTreeState:"clean", BuildDate:"2021-12-07T18:15:11Z", GoVersion:"go1.17.3", Compiler:"gc", Platform:"linux/amd64"}

4)将kubelet设置开机自启动

[root@k8s-master ~]# systemctl enable kubelet
Created symlink /etc/systemd/system/multi-user.target.wants/kubelet.service 鈫/usr/lib/systemd/system/kubelet.service.

(3)安装Master节点相关组件

1)先看K8S Master节点需要的组件镜像和版本

[root@k8s-master ~]# kubeadm config images list --kubernetes-version=v1.23.0
k8s.gcr.io/kube-apiserver:v1.23.0
k8s.gcr.io/kube-controller-manager:v1.23.0
k8s.gcr.io/kube-scheduler:v1.23.0
k8s.gcr.io/kube-proxy:v1.23.0
k8s.gcr.io/pause:3.6
k8s.gcr.io/etcd:3.5.1-0
k8s.gcr.io/coredns/coredns:v1.8.6

2)编辑下载镜像sh文件

[root@k8s-master ~]# vi k8s-image-download.sh

填入以下内容

#!/bin/bash
images=(kube-proxy:v1.23.0 kube-scheduler:1.23.0 kube-controller-manager:v1.23.0
kube-apiserver:v1.23.0 etcd:3.5.1-0 coredns/coredns:v1.8.6 pause:3.6)
for imageName in ${images[@]} ; do
   docker pull registry.aliyuncs.com/google_containers/$imageName
   docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
   docker rmi registry.aliyuncs.com/google_containers/$imageName
done

设置可执行权限,并执行

[root@k8s-master ~]# chmod +x k8s-image-download.sh
[root@k8s-master ~]# ./k8s-image-download.sh

这个下载过程会持续5-10分钟,执行完毕后,检查下版本

[root@k8s-master ~]# docker images
REPOSITORY                           TAG       IMAGE ID       CREATED         SIZE
k8s.gcr.io/kube-apiserver            v1.23.0   e6bf5ddd4098   11 months ago   135MB
k8s.gcr.io/kube-scheduler            v1.23.0   56c5af1d00b5   11 months ago   53.5MB
k8s.gcr.io/kube-proxy                v1.23.0   e03484a90585   11 months ago   112MB
k8s.gcr.io/kube-controller-manager   v1.23.0   37c6aeb3663b   11 months ago   125MB
k8s.gcr.io/etcd                      3.5.1-0   25f8c7f3da61   12 months ago   293MB
k8s.gcr.io/coredns                   v1.8.6    a4ca41631cc7   13 months ago   46.8MB
k8s.gcr.io/pause                     3.6       6270bb605e12   14 months ago   683kB

   可以看到coredns(coredns:v1.8.6)与所需要的镜像名称不一致(coredns/coredns:v1.8.6,这里修改下即可

docker tag k8s.gcr.io/coredns:v1.8.6 k8s.gcr.io/coredns/coredns:v1.8.6

3)初始化

执行初始化指令

[root@k8s-master ~]# kubeadm init \
 --apiserver-advertise-address=192.168.16.4 \
 --image-repository registry.aliyuncs.com/google_containers \
 --kubernetes-version=v1.23.0 \
 --service-cidr=10.96.0.0/12 \
 --pod-network-cidr=10.244.0.0/16
  • 参数说明:

--apiserver-advertise-address:指定用master节点的ip地址 与 Cluster的其他节点通信。

--image-repository:Kubenetes默认Registries地址是 k8s.gcr.io,一般在国内并不能访问 gcr.io,
                    可以将其指定为阿里云镜像地址:registry.aliyuncs.com/google_containers。

--kubernetes-version=v1.23.0:指定要安装kubernetes的版本号。
--service-cidr:指定Service网络的范围,即负载均衡VIP使用的IP地址段。
--pod-network-cidr:指定Pod网络的范围,即Pod的IP地址段。

注意:这里需要将apiserver-advertise-address的值修改的你的master节点ip(比如本例的192.168.16.4),其他的不需要修改pod的CIDR地址端10.244.0.0/16要和后面的网络配置保持一致。

看到如下的提示界面,恭喜你,初始化成功。

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.16.4:6443 --token yjhjnc.sm8mq8r7uxs08336 \
        --discovery-token-ca-cert-hash sha256:31ab3f93149786600583d2467722da47887bbbe76442416caf5888b9a186f728 

注意:提示中的如下信息需要记录下来,后续node节点加入需要使用该指令。需要注意,其token的有效期为24小时。

kubeadm join 192.168.16.4:6443 --token yjhjnc.sm8mq8r7uxs08336 \
        --discovery-token-ca-cert-hash sha256:31ab3f93149786600583d2467722da47887bbbe76442416caf5888b9a186f728 

注意:初始化失败,需要回滚,执行命令,删除旧的文件

rm -rf /etc/kubernetes/manifests/kube-apiserver.yaml
rm -rf  /etc/kubernetes/manifests/kube-controller-manager.yaml
rm -rf  /etc/kubernetes/manifests/kube-scheduler.yaml
rm -rf  /etc/kubernetes/manifests/etcd.yaml
rm -rf /var/lib/etcd/*

4)按照提示,需要执行以下的指令

[root@k8s-master ~]# mkdir -p $HOME/.kube
[root@k8s-master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

5)健康检查

此时,我们master节点所需的组件已经安装完成了,检查是否正常的。

[root@k8s-master ~]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE                         ERROR
controller-manager   Healthy   ok                              
scheduler            Healthy   ok                              
etcd-0               Healthy   {"health":"true","reason":""}

(4)配置网络

   接下来我们配置网络插件,K8S的网络有多种插件,比如flannel,weave,Calico等,这里我们使用Calico网络插件。

1)下载Calico插件的部署yaml文件

[root@k8s-master ~]# curl https://docs.projectcalico.org/manifests/calico.yaml -O

2)修改pod的cidr块

修改calico.yaml文件中的pod cidr地址端,需要和初始化中定义的保持一致,即10.244.0.0/16

[root@k8s-master ~]# vim calico.yaml

找到如下内容

#- name: CALICO_IPV4POOL_CIDR
#  value: "192.168.0.0/16"

取消注释,并将value配置成10.244.0.0/16

- name: CALICO_IPV4POOL_CIDR
  value: "10.244.0.0/16"

3)部署插件

通过kubectl执行,执行yaml文件

[root@k8s-master ~]# kubectl apply -f calico.yaml

这个时间要持续2-3分钟,部署过程中,可以检查pod安装状态,成功后会显示running。

[root@k8s-master ~]# kubectl get pods -n kube-system
NAME                                       READY   STATUS    RESTARTS   AGE
calico-kube-controllers-6b8c67b6b5-fsp65   1/1     Running   0          5m52s
calico-node-f976g                          1/1     Running   0          5m52s
coredns-6d8c4cb4d-9n8jg                    1/1     Running   0          11h
coredns-6d8c4cb4d-kmh4l                    1/1     Running   0          11h
etcd-k8s-master                            1/1     Running   0          11h
kube-apiserver-k8s-master                  1/1     Running   0          11h
kube-controller-manager-k8s-master         1/1     Running   0          11h
kube-proxy-db9dm                           1/1     Running   0          11h
kube-scheduler-k8s-master                  1/1     Running   0          11h

再检查的master节点状态

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS   ROLES                  AGE   VERSION
k8s-master   Ready    control-plane,master   11h   v1.23.0

可以看到目前仅一个master节点,其状态已经Ready。至此,master节点已完成部署。

3、安装node节点

Master节点安装完成后,我们继续安装node节点。

(1)重复前面的相关过程(除了master组件的步骤)。

这里不再逐步介绍,直接给出所有的指令集

#1、修改主机名
[root@kubernetes02 ~]# hostnamectl set-hostname k8s-node1
[root@kubernetes02 ~]# vi /etc/hosts
#修改后的内容
[root@kubernetes02 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.4 k8s-node1 k8s-node1

#2、关闭防火墙
[root@k8s-node1 ~]# systemctl stop firewalld && systemctl disable firewalld

#3、关闭selinux分区
[root@k8s-node1 ~]# setenforce 0
setenforce: SELinux is disabled

#4、关闭swap分区
[root@k8s-node1 ~]# swapoff -a
[root@k8s-node1 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3920         272        3269           2         378        3426
Swap:             0           0           0

#5、编辑kubernetes.conf
[root@k8s-node1 ~]# vim /etc/sysctl.d/kubernetes.conf
#编辑的内容
[root@k8s-node1 ~]# cat /etc/sysctl.d/kubernetes.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1    
vm.swappiness=0
加载配置项
[root@k8s-node1 ~]# sysctl --system

#6、配置阿里云的docker源
[root@k8s-node1 ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

#7、安装docker的最新版本
[root@k8s-node1 ~]# yum install -y docker-ce docker-ce-cli containerd.io

#8、设置docker开机启动
[root@k8s-node1 ~]# systemctl enable docker && systemctl start docker
#检查版本
[root@k8s-node1 ~]# docker --version
Docker version 20.10.21, build baeda1f

#9、配置daemon.json
[root@k8s-node1 ~]# vim /etc/docker/daemon.json
#配置后的内容
[root@k8s-node1 ~]# cat /etc/docker/daemon.json
{ 
                "exec-opts": ["native.cgroupdriver=systemd"], 
                 "registry-mirrors": ["https://tl522tpb.mirror.aliyuncs.com"]
}
#加载配置并重启服务
[root@k8s-node1 ~]#  systemctl daemon-reload
[root@k8s-node1 ~]# systemctl restart docker

#10、#配置阿里云的Kubernetes源
#编辑kubernetes.repo文件
[root@k8s-node1 ~]# vim /etc/yum.repos.d/kubernetes.repo
#填下如下内容
[root@k8s-node1 ~]# cat /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=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

#11、安装kubelet kubeadm kubectl
[root@k8s-node1 ~]# yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
#检查安装版本
[root@k8s-node1 ~]# kubelet --version
Kubernetes v1.23.0
[root@k8s-node1 ~]# kubectl version
Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.0", GitCommit:"ab69524f795c42094a6630298ff53f3c3ebab7f4", GitTreeState:"clean", BuildDate:"2021-12-07T18:16:20Z", GoVersion:"go1.17.3", Compiler:"gc", Platform:"linux/amd64"}
The connection to the server localhost:8080 was refused - did you specify the right host or port?
[root@k8s-node1 ~]#  kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.0", GitCommit:"ab69524f795c42094a6630298ff53f3c3ebab7f4", GitTreeState:"clean", BuildDate:"2021-12-07T18:15:11Z", GoVersion:"go1.17.3", Compiler:"gc", Platform:"linux/amd64"}
#设置开机启动
[root@k8s-node1 ~]# systemctl enable kubelet

(2)将节点加入到K8S集群

执行Maser节点给出的kubeadm join指令

[root@k8s-node1 ~]# kubeadm join 192.168.16.4:6443 --token yjhjnc.sm8mq8r7uxs08336 \
        --discovery-token-ca-cert-hash sha256:31ab3f93149786600583d2467722da47887bbbe76442416caf5888b9a186f728

执行成功后,显示:

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

我们再到master节点执行获取node信息指令

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS   ROLES                  AGE     VERSION
k8s-master   Ready    control-plane,master   15h     v1.23.0
k8s-node1    Ready    <none>                 3m23s   v1.23.0

可以看到K8S集群中添加了k8s-node1节点,状态是Ready。

注意:如果在安装master节点时,没有记录下kubadm join那段指令,怎么办?可以重新组装,操作步骤如下:

#1、查看之前的token或者生成新的临时token
#查看之前的token指令
[root@k8s-master ~]# kubeadm token list
TOKEN                     TTL         EXPIRES                USAGES                   DESCRIPTION                                                EXTRA GROUPS
yjhjnc.sm8mq8r7uxs08336   8h          2022-11-05T15:44:15Z   authentication,signing   The default bootstrap token generated by 'kubeadm init'.   system:bootstrappers:kubeadm:default-node-token
#或者生成新的token
[root@k8s-master ~]# kubeadm token create
vbjmbg.n72o83uxorvwskts

#2、获取ca证书的sha256编码hash值
[root@k8s-master ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
31ab3f93149786600583d2467722da47887bbbe76442416caf5888b9a186f728

#3、组装新的join指令
[root@k8s-master ~]# kubeadm join 192.168.16.4:6443 --token vbjmbg.n72o83uxorvwskts \
        --discovery-token-ca-cert-hash sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

4、检查验证

通过以上步骤,我们的K8S的集群搭建完成,下面我们运行一个pod验证下。

(1)创建nginx镜像的pod

创建nginx-test-pod.yaml文件

[root@k8s-master ~]# vi nginx-test-pod.yaml

其内容如下:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-test-pod
spec:
  containers:
  - name: nginx
    image: nginx:1.8

(2)执行创建指令

[root@k8s-master ~]# kubectl apply -f nginx-test-pod.yaml 
pod/nginx-test-pod created

待创建完成后,可以查看pod信息

[root@k8s-master ~]# kubectl get pods -o wide
NAME             READY   STATUS    RESTARTS   AGE   IP             NODE        NOMINATED NODE   READINESS GATES
nginx-test-pod   1/1     Running   0          82s   10.244.36.65   k8s-node1   <none>           <none>

      此时名为nginx-test-pod的pod已经处于running状态,pod的ip地址为10.244.36.65,运行在k8s-node1节点上。访问下该nginx网址

[root@k8s-master ~]# curl http://10.244.36.65
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>

nginx可以正确访问了。

注意:如果创建pod出错,可以通过查询pod的详细信息

[root@k8s-master ~]# kubectl describe pods  nginx-test-pod

5、安装dashboard(非必选)

在Master节点上可以通过kubectl指令进行操作,但是命令行不直观,可以装个dashboard插件。

(1)下载插件的安装yaml文件

[root@k8s-master ~]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.0/aio/deploy/recommended.yaml

(2)修改Service的模式为NodeType

[root@k8s-master ~]# vi recommended.yaml

增加如下两行:

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort  #添加
  ports:
    - nodePort: 30009  #添加
      port: 443
      targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard

注意:yaml文件编写,冒号与后面字符之间有个空格,type:空格NodePort

(3)执行部署文件

[root@k8s-master ~]# kubectl apply -f recommended.yaml

执行完成后,检查pod和service是否安装完成。

[root@k8s-master ~]# kubectl get pod,svc -n kubernetes-dashboard -o wide
NAME                                             READY   STATUS    RESTARTS   AGE   IP             NODE        NOMINATED NODE   READINESS GATES
pod/dashboard-metrics-scraper-6f669b9c9b-2z2wt   1/1     Running   0          25m   10.244.36.67   k8s-node1   <none>           <none>
pod/kubernetes-dashboard-54c5fb4776-vkftv        1/1     Running   0          25m   10.244.36.66   k8s-node1   <none>           <none>

NAME                                TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)         AGE   SELECTOR
service/dashboard-metrics-scraper   ClusterIP   10.97.13.233   <none>        8000/TCP        25m   k8s-app=dashboard-metrics-scraper
service/kubernetes-dashboard        NodePort    10.103.33.69   <none>        443:30009/TCP   25m   k8s-app=kubernetes-dashboard

(4)获取token值

[root@k8s-master ~]# kubectl -n kube-system describe $(kubectl -n kube-system get secret -n kube-system -o name | grep namespace) | grep token
Name:         namespace-controller-token-k5b79
Type:  kubernetes.io/service-account-token
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6ImpoSnJkVU9wSU15YUwzUnZKQUtWei0wbzB4MzQ5Z2VBcVVDX3pHcG1xOFUifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJuYW1lc3BhY2UtY29udHJvbGxlci10b2tlbi1rNWI3OSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJuYW1lc3BhY2UtY29udHJvbGxlciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjFiNzdmNWQxLTFiMWQtNDgwOS05MzdkLTRiYzBlYWNlNmQ2NSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTpuYW1lc3BhY2UtY29udHJvbGxlciJ9.MibDU31N76cgnjOwQ18xt0TQ3EI-qbR4VoORkzIqWpi3JIU_dbGJ94CMD_HjVQyQD8DUwS5H2IYth8lZRiGLWzbKs-AC212jatGLo6Ltigj5gdSBdJmUFr_E0shP-P4vNJ776DFhGjD4ymaWpQE_cP1NljtJL9M8nI2juzLYHt4fUHYdB4w0JNDDi7PfCr05QgYVIfrAjTA0r-V95W-XX4sF8Ztf0nqKzcBnNFxqT2ygfNQrIoyBIJAqEmif1IKEdhl5N62NIFlpD9ARsYTSZQLojN7f4Del3hZu-JjLLh0ESF1btDM-aEZYdmUtbH22jPX6_sU1i7_2D1VrsEeEtg

(5)浏览器访问地址

访问如下地址https://192.168.16.4:30009

 填写token值,进入控制台界面,可以查看K8S集群的相关信息。

四、总结

     基于kubeadm的安装过程相对比较简单,执行过程中如果有问题,网上的资料也比较多,建议多摸索,多试验几次。

 附:

K8S初级入门系列之一-概述

K8S初级入门系列之二-集群搭建

K8S初级入门系列之三-Pod的基本概念和操作

K8S初级入门系列之四-Namespace/ConfigMap/Secret

K8S初级入门系列之五-Pod的高级特性

K8S初级入门系列之六-控制器(RC/RS/Deployment)

K8S初级入门系列之七-控制器(Job/CronJob/Daemonset)

K8S初级入门系列之八-网络

K8S初级入门系列之九-共享存储

K8S初级入门系列之十-控制器(StatefulSet)

K8S初级入门系列之十一-安全

K8S初级入门系列之十二-计算资源管理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/789050.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue 3.3 + Vite 4.3 + TypeScript 5+ Element-Plus:从零到一构建企业级后台管理系统(前后端开源)

vue3-element-admin 是基于 vue-element-admin 升级的 Vue3 Element Plus 版本的后台管理前端解决方案&#xff0c;技术栈为 Vue3 Vite4 TypeScript Element Plus Pinia Vue Router 等当前主流框架。 相较于其他管理前端框架&#xff0c;vue3-element-admin 的优势在于一…

红队打靶:Nullbyte打靶思路详解(vulnhub)

目录 写在开头 第一步&#xff1a;主机发现与端口扫描 第二步&#xff1a;Web渗透 第三步&#xff1a;hydra密码爆破 第四步&#xff1a;SQL注入大赏 方法一&#xff1a;手工SQL注入之联合查询 方法二&#xff1a;SQL注入写入一句话木马 方法三&#xff1a;SQL注入写入…

快速了解新一轮Moonbeam Grants申请提案

随着Moonbeam Grant第二期计划的发布&#xff0c;超过12个项目同时提交了生态Grant申请的提案。任何大于25万枚GLMR Grant的申请都将会要求项目在Moonbeam社区治理论坛上发布Grant提案&#xff0c;内容包含项目概览、申请金额、Grant使用方案以及背后的原因等等。 Grant的发放…

【VUE】vue-i18n: Uncaught SyntaxError: Not available in legacy mode

环境 vue ^3.3.4vue-i18n ^9.2.2vite ^4.4.7 问题 在vite脚手架项目当中&#xff0c;使用vue-i18n插件进行国际化多语言时&#xff0c; 报错&#xff1a;Uncaught SyntaxError: Not available in legacy mode 对于这个报错信息&#xff0c;网上大部分的处理方案是&#xff1a…

五,Eureka 第五章

5.3.2 修改pom添加依赖 <dependencies><!--公共部门--><dependency><groupId>cn.bdqn</groupId><artifactId>springcloud-api-commons</artifactId><version>${project.version}</version></dependency><!--e…

js中的数据结构之栈

js中的数据结构之栈 一、定义 栈是一种限定仅在表尾进行插入和删除操作的线性表&#xff0c;遵循后入先出的原则。 二、描述 栈是和列表类似的一种数据结构&#xff0c;也可以说栈就是一种特殊的列表。 栈里面的元素只能通过列表的一端访问&#xff0c;这一端称为栈顶。相…

Electron 学习_BrowserWindow

BrowserWindow创建并控制浏览器窗口(主进程) 条件&#xff1a;在 app 模块 emitted ready 事件之前&#xff0c;您不能使用此模块。 1.在加载页面时&#xff0c;渲染进程第一次完成绘制时&#xff0c;如果窗口还没有被显示&#xff0c;渲染进程会发出 ready-to-show 事件 。 在…

UML/SysML建模工具更新(2023.7)(1-5)有国产工具

DDD领域驱动设计批评文集 欢迎加入“软件方法建模师”群 《软件方法》各章合集 最近一段时间更新的工具有&#xff1a; 工具最新版本&#xff1a;Visual Paradigm 17.1 更新时间&#xff1a;2023年7月11日 工具简介 很用心的建模工具。支持编写用例规约。支持文本分析和C…

微服务入门---SpringCloud(二)

微服务入门---SpringCloud&#xff08;二&#xff09; 1.Nacos配置管理1.1.统一配置管理1.1.1.在nacos中添加配置文件1.1.2.从微服务拉取配置 1.2.配置热更新1.2.1.方式一1.2.2.方式二 1.3.配置共享1&#xff09;添加一个环境共享配置2&#xff09;在user-service中读取共享配置…

k8s deployment(k8s经典版)|PetaExpress

Deployment是什么&#xff1f; Deployment是指在软件开发中将应用程序或系统部署到目标环境中的过程。它包括将代码编译、配置、打包并安装到目标服务器或设备上的步骤。k8s deployment是&#xff08;k8s经典版&#xff09;中用来管理发布的控制器&#xff0c;在开发的过程中使…

实训笔记7.25

实训笔记7.25 7.25笔记一、MapReduce的特殊使用场景1.1 通过MapReduce程序实现多文件Join操作1.1.1 通过在Reduce端实现join操作1.1.2 通过在Map端实现join操作 1.2 MapReduce中的计数器的使用1.2.1 计数器使用两种方式 1.3 MapReduce实现数据清洗 二、MapReduce的OutputFormat…

算法与数据结构(三)--栈

一.栈的基本概念 栈是一种特殊的表&#xff0c;这种表只在表首进行插入和删除操作。 因此&#xff0c;表首对于栈来说具有特殊的意义&#xff0c;称为栈顶。相应的&#xff0c;表尾称为栈底。不含任何元素的栈称为空栈。 栈的修改遵循后进先出的原则&#xff0c;Last In First…

异常报错:The last packet sent successfully to the server was 0 milliseconds ago

本地运行项目&#xff0c;突然报错&#xff0c;日志为&#xff1a; The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.在网上找了一圈&#xff0c;没有找到合适的解决方案。最后猜测问题有…

基于Java+SpringBoot+vue前后端分离在线商城系统设计实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

华为战略方法论:BLM模型之关键任务与依赖关系

内容简介 在 BLM 模型中&#xff0c;执行部分包括四个模块&#xff0c;分别是&#xff1a; 关键任务与依赖关系&#xff1b;组织与绩效&#xff1b;人才&#xff1b;氛围与文化。 详细内容&#xff0c;大家可以参看下面这张图。 这四个模块其实是可以进一步划分成两个关键点…

【LeetCode】300.最长递增子序列

首先分析这个问题&#xff0c;以示例1为例。 已经求得最大递增子序列长度为4&#xff0c;而且该子序列中最后一个数为101&#xff0c; 那么一定存在一个数ai&#xff0c;使得ai以及ai之前的所有数组成的序列中&#xff0c; 最大递增子序列长度为3&#xff0c;而且该子序列中…

Linux环境Arduino IDE中配置ATOM S3

linux选择ubuntu发行版。 硬件设备有多小呢&#xff1a; 功能超级强大。 之前的ROS1和ROS2案例已经全部移植完成并测试结束&#xff08;三轮纯人力校验&#x1f60e;&#xff09;。 官网文档信息非常非常好&#xff1a; https://docs.m5stack.com/zh_CN/quick_start/atoms3…

AI学习笔记一:软件和环境搭建

若该文为原创文章&#xff0c;转载请注明原文出处。 工欲善其事必先利其器。 一、环境説明 1、win10, 无CPU。 2、云服务器AutoDL 3、安装的软件&#xff1a;pyCharm(比较少用&#xff0c;所以不安装&#xff09; 4、环境&#xff1a;miniconda 二、miniconda 安装 1、…

List的各种排序

目录 Collections.sort对list进行排序 对象中某个属性进行排序 通过比较器进行比较 JAVA8特性Stream流进行排序 Stream升降序组合使用 Collections.sort对list进行排序 public static void main(String[] args) {List<Integer> list new ArrayList<>();list…

渗透测试流程

目录 前言&#xff1a; 渗透测试流程 1、先了解下渗透测试与入侵的最大区别 2、一般渗透测试流程 前言&#xff1a; 在软件开发中&#xff0c;渗透测试是一种非常重要的安全测试方法&#xff0c;它可以帮助我们更加全面地检测软件中的安全漏洞和风险。 渗透测试流程 1、…