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

一、前言

    为了更好学习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初级入门系列之十二-计算资源管理

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】指针---初阶

&#x1f341; 博客主页:江池俊的博客 &#x1f341;收录专栏&#xff1a;C语言——探索高效编程的基石 &#x1f341; 如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏&#x1f31f; 三连支持一下博主&#x1f49e; 目录 一、指针是什么&#xff1f; 1.1指…

2min搞定 mac pycharm新建导入python项目

mac pycharm新建和导入python项目&虚拟环境配置&下载类库 一、通用设置step1 、通过自定义配置&#xff0c;指定默认虚拟环境变量step2、设置虚拟环境和指定默认工作空间step3 、导入或者新建python项目 二、pycharm新建python项目step1、点击新建【file->newProjec…

抖音、美团、华为“巧”搅支付春水

配图来自Canva可画 如今&#xff0c;移动支付已经成了当下最流行的支付方式&#xff0c;从小吃店到大商超&#xff0c;从地铁、公交到飞机、高铁&#xff0c;移动支付的应用场景层出不穷&#xff0c;可以说&#xff0c;现代人的生活已经离不开移动支付了。而在此背景下&#x…

动态内存常见的问题

对空指针的解引用 改正后的代码&#xff1a; 返回栈&#xff08;临时变量&#xff09;空间地址的问题 释放空间后及时把指针设为空 void Test(void) {char* str (char*)malloc(100);strcpy(str, "hello");free(str);str NULL;//释放空间后及时把指针设为空if (s…

25-30天每日强训选择题改错解析

int i5; int s(i)(i)(i–)(–i); s( )//s 的值是什么&#xff1f; A 28 B 25 C 21 D 26 E 24 F 23 正确答案&#xff1a; E 5775 24 或者 --在后先不变化数值 -- 在前先变化再运算 以下哪项不属于java类加载过程&#xff1f; A 生成java.lang.Class对象 B int类型对象成…

【MySQL】存储引擎(六)

&#x1f697;MySQL学习第六站~ &#x1f6a9;本文已收录至专栏&#xff1a;MySQL通关路 ❤️文末附全文思维导图&#xff0c;感谢各位点赞收藏支持~ 一.引入 大家可能没有听说过存储引擎&#xff0c;但是一定听过引擎这个词&#xff0c;引擎就是发动机&#xff0c;是一个机器…

疲劳驾驶检测和识别2:Pytorch实现疲劳驾驶检测和识别(含疲劳驾驶数据集和训练代码)

疲劳驾驶检测和识别2&#xff1a;Pytorch实现疲劳驾驶检测和识别(含疲劳驾驶数据集和训练代码) 目录 疲劳驾驶检测和识别2&#xff1a;Pytorch实现疲劳驾驶检测和识别(含疲劳驾驶数据集和训练代码) 1.疲劳驾驶检测和识别方法 2.疲劳驾驶数据集 &#xff08;1&#xff09;疲…

系统架构设计师-软件架构设计(2)

目录 一、基于架构的软件开发方法&#xff08;ABSD&#xff09; 1、架构需求 1.1 需求获取 1.2 标识构件 1.3 架构需求评审 2、架构设计 2.1 提出架构模型 2.2 映射构件 2.3 分析构件的相互作用 2.4 产生架构 2.5 设计评审 3、架构文档化 4、架构复审 5、架构实现 5.1 分析与…

探寻智能化未来:AI与Web3共创金融领域巨大潜力

人工智能&#xff08;AI&#xff09;和Web3技术的迅猛发展为我们带来了许多新的机遇和影响。在数字经济和社会的浪潮中&#xff0c;结合了AI的智能化能力和Web3的去中心化与区块链技术&#xff0c;我们将进入一个智能化的Web3时代。人工智能和Web3技术是开拓生产力极限和重新定…

LabVIEW使用支持向量机对脑磁共振成像进行图像分类

LabVIEW使用支持向量机对脑磁共振成像进行图像分类 医学成像是用于创建人体解剖学图像以进行临床研究、诊断和治疗的技术和过程。它现在是医疗技术发展最快的领域之一。通常用于获得医学图像的方式是X射线&#xff0c;计算机断层扫描&#xff08;CT&#xff09;&#xff0c;磁…

记录安装stable diffusion webui时,出现的gfpgan安装卡住的问题

参考链接&#xff1a;(145条消息) 使用stable diffusion webui时&#xff0c;安装gfpgan失败的解决方案&#xff08;windows下的操作&#xff09;_新时代原始人的博客-CSDN博客

【Seata】微服务集成seata

文章目录 1、Seata介绍2、Seata架构3、部署TC服务4、微服务集成seata 1、Seata介绍 Seata是 2019 年 1 月份蚂蚁金服和阿里巴巴共同开源的分布式事务解决方案。 官网http://seata.io/ 2、Seata架构 Seata事务管理有三个角色&#xff1a; TC (Transaction Coordinator) - 事务…

UI 自动化的 PageObject 设计模式

目录 前言&#xff1a; 什么是 PageObject 模型&#xff1f; 为什么使用 PageObject 模型&#xff1f; PO 模式优点 PageObject 实践 前言&#xff1a; UI 自动化是一种软件测试方法&#xff0c;它主要用于检查应用程序的用户界面是否符合预期。PageObject 是 UI 自动化中…

信息安全与网络空间安全 - 保障您的在线安全

数据参考&#xff1a;CISP官方 目录&#xff1a; 信息与信息安全 信息安全属性 网络安全发展阶段 网络空间安全保障 一、信息与信息安全 1、什么是信息&#xff1f; 定义&#xff1a;信息是通过传递和处理的方式&#xff0c;用于传达知识、事实、数据或观点的内容。形…

华为盘古大模型:能源领域的颠覆性突破

近日&#xff0c;华为盘古大模型在能源领域横空出世&#xff0c;引发了广泛关注和期待。作为一项具有颠覆性影响的技术创新&#xff0c;华为盘古大模型在能源行业中展现出巨大的潜力和前景。其优质的计算能力和智能优化算法&#xff0c;将为能源产业带来翻天覆地的变革。 盘古大…

List集合类详解(附加思维导图)

目录 一、List集合思维导图 二、List集合类的常见方法 2.1、ArrayList集合常用方法 2.2、LinkedList集合常用方法 一、List集合思维导图 二、List集合类的常见方法 2.1、ArrayList集合常用方法 ①.add(Object element) 向列表的尾部添加指定的元素。 ②.size() 返回列表中…

Flink CEP (一)原理及概念

目录 1.Flink CEP 原理 2.Flink API开发 2.1 模式 pattern 2.2 模式 pattern属性 2.3 模式间的关系 1.Flink CEP 原理 Flink CEP内部是用NFA&#xff08;非确定有限自动机&#xff09;来实现的&#xff0c;由点和边组成的一个状态图&#xff0c;以一个初始状态作为起点&am…

PHP注册/登录/发邮件--【强撸项目】

强撸项目系列总目录在000集 PHP要怎么学–【思维导图知识范围】 文章目录 本系列校训本项目使用技术 上效果图phpStudy 设置导数据库程序基本流程项目目录如图&#xff1a;注册zhuce.html配套资源作业&#xff1a; 本系列校训 用免费公开视频&#xff0c;卷飞培训班哈人&…

C# Modbus通信从入门到精通(21)——Modbus TCP协议原理

Modbus TCP是走网口的&#xff0c;也可以在同一时间内有多个从站访问主站&#xff0c;并且通过Modbus事务处理标识来区分同一时刻的不同Modbus事务&#xff0c;这是区别于Modbus ASCII和Modbus RTU的地方。 1、访问模式&#xff1a; Modbus客户端通常输入Modbus服务器的IP地址…

两个小封装电机驱动芯片:MLX813XX、A4950

一&#xff0e;MLX813XX MELEXIS的微型电机驱动MLX813XX系列芯片集成MCU、预驱动以及功率模块等能够满足10W以下的电机驱动。 相对于普通分离器件的解决方案&#xff0c;MLX813XX系列电机驱动芯片是一款高集成度的驱动控制芯片&#xff0c;可以满足汽车系统高品质和低成本的要…