一、Kubernetes是什么?
Kubernetes,也称为K8s,是一个用于自动部署、扩展和管理容器化应用程序的开源系统。
温馨提示:k8s的称呼并非空穴来风,可百度搜索"i18n"(是“国际化”的简称,全称为"internationalization")
二、Kubernetes概括
1.docker以集群工作面临的问题
集群编排面临的问题如下:
1.跨主机通信问题?
2.多容器跨主机部署?
3.容器发布,升级,回滚?
4.容器挂掉后,如何自动拉起服务?
5.当现有容器资源不足时,是否可以自动扩容?
6.能够实现容器的健康检查,若不健康是否能自动恢复?
7.如何将容器调度到集群特定节点?
8.将容器从一个节点驱逐,下线节点如何操作?
9.集群如何扩容?
10.集群如何监控?
11.集群日志如何收集?
...
早期容器容器编排工具:docker inc swarm,Apache mesos marathon,Google Kubernetes(简称K8S)
2.Kubernetes发展历程
时间 | 事件 | 应用场景 |
---|---|---|
2003-2014 | Google 开发内部系统 Borg、Omega | 大规模调度容器工作负载的核心经验沉淀 |
2014年6月 | Kubernetes 项目由 Google 开源 | 命名灵感来自希腊语“舵手”,代号:Project Seven(源自 Star Trek) |
2015年7月 | Kubernetes 1.0 正式发布 | 并捐赠给 CNCF(云原生计算基金会)管理 |
2016年 | Docker 热度攀升,K8s 开始流行 | K8s 成为容器编排的主流方案 |
2017年 | 支持生产环境的功能逐步完善 | 引入 StatefulSet、NetworkPolicy、RBAC |
2018年 | K8s 被 AWS、Azure、GCP 全面支持 | CNCF 宣布 Kubernetes 毕业(Graduated) |
2019年后 | 多集群、Operator、Serverless 蓬勃发展 | K8s 成为云原生生态中心 |
2021年起 | Docker shim 被弃用,转向 CRI(如 containerd) | Kubernetes 开始脱离对 Docker 的依赖 |
现在(2025) | 成为事实标准,多云/边缘场景逐步成熟 | 被广泛用于微服务、AI、大数据、DevOps 平台 |
推荐阅读:
https://kubernetes.io/releases/patch-releases/#1-22
https://github.com/kubernetes/kubernetes
https://kubernetes.io/releases/release/
3.Kubernetes架构
Scheduler:
kube-scheduler根据调度算法为新创建的Pod选择一个Node节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上。
Controller Manager:
Kube-controller-manager,处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的。
Cloud Controller Manager:
用在云平台上的Kube-controller-manager组件。如果我们直接在物理机上部署的话,可以不使用该组件。
API Server:
kube-apiserver,集群的统一入口,各组件协调者,以RESTFUL API提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给etcd存储。
Etcd:
分布式键值存储系统,用于保存集群状态元数据信息,比如Pod,Service等对象信息。这个数据库是可以单独拿出来部署,只需要API server可以连接到该分布式数据库集群即可。
kubelet:
可以理解为Master在工作节点上的Agent,管理本机运行容器的生命周期,比如创建容器,Pod挂载数据卷,下载secret,获取容器的节点状态等工作。kubelet将每一个Pod转换成一组容器。
kube-proxy:
在工作节点上实现Pod网络代理,维护网络规则和四层负载均衡工作。换句话说,就是用于负责Pod网络路由,用于对外提供访问的实现。可以找到你关心的项目所在的pod节点。
POD:
用户划分容器的最小单位,一个POD可以存在多个容器。
docker/rocket(rkt,已停止支持):
容器引擎,用于运行容器。
参考链接:
https://kubernetes.io/zh/docs/concepts/overview/components/
三、Kubernete集群部署方式及大规模集群注意事项
1.kubernetes集群部署方式
yum安装:
优点:
安装,配置很简单,适合新手学习。
缺点:
版本较低,目前仅支持K8S 1.5.2版本,很多功能不支持。
kind安装:
kind让你能够在本地计算机上运行Kubernetes。 kind要求你安装并配置好Docker。
推荐阅读:
https://kind.sigs.k8s.io/docs/user/quick-start/
minikube部署:
minikube是一个工具, 能让你在本地运行Kubernetes。
minikube在你本地的个人计算机(包括 Windows、macOS 和 Linux PC)运行一个单节点的Kubernetes集群,以便你来尝试 Kubernetes 或者开展每天的开发工作。因此很适合开发人员体验K8S。
推荐阅读:
https://minikube.sigs.k8s.io/docs/start/
kubeadm:
你可以使用kubeadm工具来创建和管理Kubernetes集群,适合在生产环境部署。
该工具能够执行必要的动作并用一种用户友好的方式启动一个可用的、安全的集群。
推荐阅读:
https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/
https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/
二进制部署:
安装步骤比较繁琐,但可以更加了解细节。适合运维人员生产环境中使用。
源码编译安装:
难度最大,请做好各种故障排查的心理准备。其实这样一点对于K8S二次开发的人员应该不是很难。
2.kubectl是kubernetes集群的命令行工具
kubectl使得你可以对Kubernetes集群运行命令。 你可以使用kubectl来部署应用、监测和管理集群资源以及查看日志。
推荐阅读:
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands
3.大规模集群的注意事项
推荐阅读:
https://kubernetes.io/zh/docs/setup/best-practices/cluster-large/
四、部署Kubernetes集群
1.安装harbor仓库
1)下载harbor软件包
https://github.com/goharbor/harbor/releases/download/v1.10.10/harbor-offline-installer-v1.10.10.tgz
2)创建工作目录
[root@harbor ~]# mkdir -pv /buffes/softwares
3)解压harbor软件包
[root@harbor ~]# tar xf harbor-offline-installer-v1.10.10.tgz -C /buffes/softwares/
4)创建证书的工作目录
[root@harbor ~]# mkdir -pv /buffes/softwares/harbor/certs/{ca,server,client}
5)生成自建CA证书
1.进入证书目录
[root@harbor ~]# cd /buffes/softwares/harbor/certs/
2.生成CA私钥
[root@harbor certs]# openssl genrsa -out ca/ca.key 4096
3.生成ca的自签名证书
[root@harbor certs]# openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=shenzhen/L=shenzhen/O=example/OU=Personal/CN=buffes.com" \
-key ca/ca.key \
-out ca/ca.crt
6)生成harbor服务器的证书文件及客户端证书
1.生成harbor主机的私钥
[root@harbor certs]# openssl genrsa -out server/harbor.buffes.com.key 4096
2.生成harbor主机的证书申请
[root@harbor certs]# openssl req -sha512 -new \
-subj "/C=CN/ST=shenzhen/L=shenzhen/O=example/OU=Personal/CN=harbor.buffes.com" \
-key server/harbor.buffes.com.key \
-out server/harbor.buffes.com.csr
3.生成x509 v3扩展文件
[root@harbor certs]# cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=buffes.com
DNS.2=buffes
DNS.3=harbor.buffes.com
EOF
4.使用"v3.ext"给harbor主机签发证书
[root@harbor certs]# openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca/ca.crt -CAkey ca/ca.key -CAcreateserial \
-in server/harbor.buffes.com.csr \
-out server/harbor.buffes.com.crt
5.将crt文件转换为cert客户端证书文件
[root@harbor certs]# openssl x509 -inform PEM -in server/harbor.buffes.com.crt -out server/harbor.buffes.com.cert
6.准备docker客户端证书
[root@harbor certs]# cp server/harbor.buffes.com.{cert,key} client/
[root@harbor certs]# cp ca/ca.crt client/
[root@harbor certs]#
[root@harbor certs]# ll client/
total 12
-rw-r--r-- 1 root root 2033 Apr 12 10:09 ca.crt
-rw-r--r-- 1 root root 2122 Apr 12 10:09 harbor.buffes.com.cert
-rw-r--r-- 1 root root 3247 Apr 12 10:09 harbor.buffes.com.key
7.查看所有证书文件结果
[root@harbor certs]# ll -R
.:
total 4
drwxr-xr-x 2 root root 48 Apr 12 09:46 ca
drwxr-xr-x 2 root root 85 Apr 12 10:09 client
drwxr-xr-x 2 root root 135 Apr 12 09:47 server
-rw-r--r-- 1 root root 275 Apr 12 09:45 v3.ext
./ca:
total 12
-rw-r--r-- 1 root root 2033 Apr 12 09:41 ca.crt
-rw-r--r-- 1 root root 3243 Apr 12 09:40 ca.key
-rw-r--r-- 1 root root 17 Apr 12 09:46 ca.srl
./client:
total 12
-rw-r--r-- 1 root root 2033 Apr 12 10:09 ca.crt
-rw-r--r-- 1 root root 2122 Apr 12 10:09 harbor.buffes.com.cert
-rw-r--r-- 1 root root 3247 Apr 12 10:09 harbor.buffes.com.key
./server:
total 16
-rw-r--r-- 1 root root 2122 Apr 12 09:47 harbor.buffes.com.cert
-rw-r--r-- 1 root root 2122 Apr 12 09:46 harbor.buffes.com.crt
-rw-r--r-- 1 root root 1716 Apr 12 09:44 harbor.buffes.com.csr
-rw-r--r-- 1 root root 3247 Apr 12 09:43 harbor.buffes.com.key
7)配置harbor服务器使用证书
1.切换工作目录
[root@harbor certs]# cd ..
[root@harbor harbor]#
[root@harbor harbor]# pwd
/buffes/softwares/harbor
2.修改配置文件
[root@harbor harbor]# egrep "^$|#" -v harbor.yml
hostname: harbor.buffes.com
...
hostname: harbor.buffes.com
https:
port: 443
certificate: /buffes/softwares/harbor/certs/server/harbor.buffes.com.crt
private_key: /buffes/softwares/harbor/certs/server/harbor.buffes.com.key
harbor_admin_password: 1
...
8)安装harbor服务
[root@harbor harbor]# ./install.sh
9)Windows验证harbor的https
1.windows配置主机解析
# C:\Windows\System32\drivers\etc\hosts
...
10.0.0.250 harbor.buffes.com
2.浏览器访问
https://harbor.buffes.com
10)Linux验证harbor的https
1.配置地址解析
[root@harbor ~]# echo 10.0.0.250 harbor.buffes.com >> /etc/hosts
2.在docker客户端节点创建自签证书域名存放路径
[root@harbor ~]# mkdir -pv /etc/docker/certs.d/harbor.buffes.com
3.服务端将证书文件拷贝到客户端docker节点,若不执行该操作,则会报错"x509: certificate signed by unknown authority"
[root@harbor ~]# cp /buffes/softwares/harbor/certs/client/* /etc/docker/certs.d/harbor.buffes.com/
[root@harbor ~]#
[root@harbor ~]# ll /etc/docker/certs.d/harbor.buffes.com/
total 12
-rw-r--r-- 1 root root 2033 Apr 12 10:11 ca.crt
-rw-r--r-- 1 root root 2122 Apr 12 10:11 harbor.buffes.com.cert
-rw-r--r-- 1 root root 3247 Apr 12 10:11 harbor.buffes.com.key
4.登录验证
[root@harbor ~]# docker login -u admin -p 1 harbor.buffes.com
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
5.退出登录
[root@harbor ~]# more /root/.docker/config.json
{
"auths": {
"harbor.buffes.com": {
"auth": "YWRtaW46MQ=="
}
}
}
[root@harbor ~]# echo YWRtaW46MQ==
YWRtaW46MQ==
[root@harbor ~]# echo YWRtaW46MQ== | base64 -d | more
admin:1
[root@harbor ~]# docker logout harbor.buffes.com
Removing login credentials for harbor.buffes.com
[root@harbor ~]# more /root/.docker/config.json
{
"auths": {}
}
2.K8S各节点环境准备
(1)虚拟机操作系统环境准备
参考链接:
https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
(2)关闭swap分区
1)临时关闭
swapoff -a && sysctl -w vm.swappiness=0
2)基于配置文件关闭
sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab
(3)确保各个节点MAC地址或product_uuid 唯一
ifconfig eth0 | grep ether | awk '{print $2}'
cat /sys/class/dmi/id/product_uuid
温馨提示:
一般来讲,硬件设备会拥有唯一的地址,但是有些虚拟机的地址可能会重复。
Kubernetes使用这些值来唯一确定集群中的节点。 如果这些值在每个节点上不唯一,可能会导致安装失败。
(4)检查网络节点是否互通
简而言之,就是检查你的k8s集群各节点是否互通,可以使用ping命令来测试。
(5)允许iptable检查桥接流量
cat <<EOF | tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
(6)检查端口是否被占用
参考链接: https://kubernetes.io/zh/docs/reference/ports-and-protocols/
(7)检查docker的环境
参考链接:
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.15.md#unchanged
1)配置docker源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
yum list docker-ce --showduplicates
2)安装指定的docker版本
yum -y install docker-ce-20.10.24 docker-ce-cli-20.10.24
yum -y install bash-completion
source /usr/share/bash-completion/bash_completion
3)添加自动补全功能
yum -y install bash-completion
source /usr/share/bash-completion/bash_completion
4)打包软件包分发到其他节点部署docker(此步骤可跳过)
mkdir docker-rpm-20.10.24 && find /var/cache/yum -name "*.rpm" | xargs mv -t docker-rpm-20.10.24/
5)配置docker优化
mkdir -pv /etc/docker && cat <<EOF | sudo tee /etc/docker/daemon.json
{
"registry-mirrors": [
"https://proxy.1panel.live",
"https://docker.1panel.top",
"https://docker.m.daocloud.io",
"https://docker.1ms.run",
"https://docker.ketches.cn",
"https://dockerhub.timeweb.cloud",
"https://hub.registry-mirrors.top"
],
"exec-opts": ["native.cgroupdriver=systemd"],
"dns": ["223.5.5.5", "223.6.6.6"]
}
EOF
6)将harbor服务器的客户端证书拷贝到k8s集群
1.k8s所有节点创建自建证书目录
mkdir -pv /etc/docker/certs.d/harbor.buffes.com
2.登录harbor服务器将自建证书拷贝到K8S集群的所有节点
[root@harbor ~]# scp /buffes/softwares/harbor/certs/client/* 10.0.0.231:/etc/docker/certs.d/harbor.buffes.com
[root@harbor ~]# scp /buffes/softwares/harbor/certs/client/* 10.0.0.232:/etc/docker/certs.d/harbor.buffes.com
[root@harbor ~]# scp /buffes/softwares/harbor/certs/client/* 10.0.0.233:/etc/docker/certs.d/harbor.buffes.com
7)配置docker开机自启动
systemctl daemon-reload
systemctl enable --now docker
systemctl status docker
8)验证镜像加速是否成功
[root@harbor ~]# docker info | grep "Registry Mirrors" -A 1
Registry Mirrors:
https://proxy.1panel.live/
(9)禁用防火墙
systemctl disable --now firewalld
(10)禁用selinux
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
grep ^SELINUX= /etc/selinux/config
(11)配置host解析
cat >> /etc/hosts <<'EOF'
10.0.0.231 k8s231
10.0.0.232 k8s232
10.0.0.233 k8s233
10.0.0.250 harbor.buffes.com
EOF
cat /etc/hosts
验证是否能够登录harbor仓库
[root@k8s231 ~]# docker login -u admin -p 1 harbor.buffes.com
(12)安装docker compose
1)添加epel源
[root@harbor ~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
(2)安装docker-compose
[root@harbor ~]# yum -y install docker-compose
(3)查看docker-compose版本
[root@harbor ~]# docker-compose version
docker-compose version 1.18.0, build 8dd22a9
docker-py version: 2.6.1
CPython version: 3.6.8
OpenSSL version: OpenSSL 1.0.2k-fips 26 Jan 2017
3.kubernetes集群部署方式
1)目前生产环境部署kubernetes集群主要由两种方式:
1.kubeadm:
kubeadm是一个K8S部署工具,提供kubeadm init和kubejoin,用于快速部署kubernetes集群。
你可以使用kubeadm工具来创建和管理Kubernetes集群,适合在生产环境部署。
该工具能够执行必要的动作并用一种用户友好的方式启动一个可用的、安全的集群。
推荐阅读:
https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/
https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/
2.二进制部署:
从GitHub下载发行版的二进制包,手动部署每个组件,组成kubernetes集群
除了上述介绍的两种方式部署外,还有其他部署方式的途径:
1)yum:
已废弃,目前支持的最新版本为2017年发行的1.5.2版本。
2)kind安装:
kind让你能够在本地计算机上运行Kubernetes。 kind要求你安装并配置好Docker。
推荐阅读:
https://kind.sigs.k8s.io/docs/user/quick-start/
3)minikube:
适合开发环境,能够快速在Windows或者Linux构建K8S集群。
参考链接:
https://minikube.sigs.k8s.io/docs/
4)rancher:
基于K8S改进发行了轻量级K8S,让K8S孕育而生。
参考链接:
https://www.rancher.com/
5)KubeSphere:
青云科技基于开源KubeSphere快速部署K8S集群。
参考链接:
https://kubesphere.com.cn
6)kuboard:
也是对k8s进行二次开发的产品,新增了很多独有的功能。
参考链接:
https://kuboard.cn/
7)kubeasz:
使用ansible部署,扩容,缩容kubernetes集群,安装步骤官方文档已经非常详细了。
参考链接:
https://github.com/easzlab/kubeasz/
第三方云厂商:
比如aws,阿里云,腾讯云,京东云等云厂商均有K8S的相关SAAS产品。
更多的第三方部署工具:
参考链接:
https://landscape.cncf.io/
3.1 软件包作用说明
你需要在每台机器上安装以下的软件包:
kubeadm:
用来初始化集群的指令。
kubelet:
在集群中每个节点上用来启动Pod和容器等。
kubectl:
用来与集群通信的命令行工具。
kubeadm不能帮你安装或者管理kubelet或kubectl,所以你需要确保它们与通过kubeadm安装的控制平面(master)的版本相匹配。 如果不这样做,则存在发生版本偏差的风险,可能会导致一些预料之外的错误和问题。
然而,控制平面与kubelet间的相差一个次要版本不一致是支持的,但kubelet的版本不可以超过"API SERVER"的版本。 例如,1.7.0版本的kubelet可以完全兼容1.8.0版本的"API SERVER",反之则不可以。
3.2 所有节点安装kubeadm,kubelet,kubectl
1.配置软件源
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
EOF
2.查看kubeadm的版本(将来你要安装的K8S时请所有组件版本均保持一致!)
yum -y list kubeadm --showduplicates | sort -r
3.安装kubeadm,kubelet,kubectl软件包
yum -y install kubeadm-1.23.17-0 kubelet-1.23.17-0 kubectl-1.23.17-0
yum -y install kubeadm-1.28.2-0 kubelet-1.28.2-0 kubectl-1.28.2-0
4.启动kubelet服务(若服务启动失败时正常现象,其会自动重启,因为缺失配置文件,初始化集群后恢复!此步骤可跳过!)
systemctl enable --now kubelet
systemctl status kubelet
参考链接:
https://kubernetes.io/zh/docs/tasks/tools/install-kubectl-linux/
3.3 初始化control plan(master)节点,只在k8s231这台节点机器上执行操作,初始化
1.使用kubeadm初始化master节点
[root@k8s231 ~]# kubeadm init --kubernetes-version=v1.23.17 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.100.0.0/16 --service-cidr=10.200.0.0/16 --service-dns-domain=buffes.com
相关参数说明:
--kubernetes-version:
指定K8S master组件的版本号。
--image-repository:
指定下载k8s master组件的镜像仓库地址。
--pod-network-cidr:
指定Pod的网段地址。
--service-cidr:
指定SVC的网段
--service-dns-domain:
指定service的域名。若不指定,默认为"cluster.local"。
使用kubeadm初始化集群时,可能会出现如下的输出信息:
[init]
使用初始化的K8S版本。
[preflight]
主要是做安装K8S集群的前置工作,比如下载镜像,这个时间取决于你的网速。
[certs]
生成证书文件,默认存储在"/etc/kubernetes/pki"目录哟。
[kubeconfig]
生成K8S集群的默认配置文件,默认存储在"/etc/kubernetes"目录哟。
[kubelet-start]
启动kubelet,
环境变量默认写入:"/var/lib/kubelet/kubeadm-flags.env"
配置文件默认写入:"/var/lib/kubelet/config.yaml"
[control-plane]
使用静态的目录,默认的资源清单存放在:"/etc/kubernetes/manifests"。
此过程会创建静态Pod,包括"kube-apiserver","kube-controller-manager"和"kube-scheduler"
[etcd]
创建etcd的静态Pod,默认的资源清单存放在:""/etc/kubernetes/manifests"
[wait-control-plane]
等待kubelet从资源清单目录"/etc/kubernetes/manifests"启动静态Pod。
[apiclient]
等待所有的master组件正常运行。
[upload-config]
创建名为"kubeadm-config"的ConfigMap在"kube-system"名称空间中。
[kubelet]
创建名为"kubelet-config-1.22"的ConfigMap在"kube-system"名称空间中,其中包含集群中kubelet的配置
[upload-certs]
跳过此节点,详情请参考”--upload-certs"
[mark-control-plane]
标记控制面板,包括打标签和污点,目的是为了标记master节点。
[bootstrap-token]
创建token口令,例如:"kbkgsa.fc97518diw8bdqid"。
如下图所示,这个口令将来在加入集群节点时很有用,而且对于RBAC控制也很有用处哟。
[kubelet-finalize]
更新kubelet的证书文件信息
[addons]
添加附加组件,例如:"CoreDNS"和"kube-proxy”
2.拷贝授权文件,用于管理K8S集群
[root@k8s231 ~]# mkdir -p $HOME/.kube
[root@k8s231 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s231 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
3.查看集群节点
[root@k8s231.~]# kubectl get componentstatuses
[root@k8s231 ~]# kubectl get cs
3.4 配置所有worker节点加入k8s集群
1.所有节点加入K8S集群,注意,你的token和我不一样(复制你自己的token)
[root@k8s232 ~]# kubeadm join 10.0.0.231:6443 --token lj1fob.jabis5g9c3db5ot4 --discovery-token-ca-cert-hash sha256:cefaa1909119929f34cb7366602a3ea4089f586c6ed8465fd15148644763a181
[root@k8s233 ~]# kubeadm join 10.0.0.231:6443 --token lj1fob.jabis5g9c3db5ot4 --discovery-token-ca-cert-hash sha256:cefaa1909119929f34cb7366602a3ea4089f586c6ed8465fd15148644763a181
2.查看现有的节点
[root@k8s232 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s231 NotReady control-plane,master 15m v1.23.17
k8s232 NotReady <none> 3m39s v1.23.17
k8s233 NotReady <none> 3m6s v1.23.17
3.添加kubectl的自动补全功能
[root@k8s231 ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc && source ~/.bashrc
kind 自动补全功能
echo "source <(kind completion bash)" >> ~/.bashrc && source ~/.bashrc
3.5 安装网络插件并验证连通性
1.下载flannel的资源清单
[root@k8s231 ~]# wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
2.安装flanne(值得注意的是,如果你的Pod网络和我的不一样"10.100.0.0/16",请自行修改配置文件)
[root@k8s231 ~]# kubectl apply -f kube-flannel.yml
3.检查flannel组件是否正常,均处于"Running"状态!
[root@k8s231 ~]# kubectl get pods -A -o wide | grep kube-flannel
kube-flannel kube-flannel-ds-b9mdk 1/1 Running 2 (65d ago) 77s 10.0.0.231 k8s231 <none> <none>
kube-flannel kube-flannel-ds-mbq6h 1/1 Running 0 77s 10.0.0.233 k8s233 <none> <none>
kube-flannel kube-flannel-ds-q9x8z 1/1 Running 0 77s 10.0.0.232 k8s232 <none> <none>
4.编写ds资源清单
[root@k8s231 ~]# cat buffes-ds.yaml
kind: DaemonSet
apiVersion: apps/v1
metadata:
name: buffes-ds
spec:
selector:
matchLabels:
school: buffes
class: rjb-golang
template:
metadata:
labels:
school: buffes
class: rjb-golang
spec:
containers:
- image: alpine
stdin: true
name: mylinux
5.创建ds资源
[root@k8s231 ~]# kubectl apply -f buffes-ds.yaml
daemonset.apps/buffes-ds created
[root@k8s231 ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
buffes-ds-2ks6n 1/1 Running 0 2m48s 10.100.2.2 k8s233 <none> <none>
buffes-ds-m5zd8 1/1 Running 0 2m49s 10.100.1.2 k8s232 <none> <none>
6.测试跨节点Pod之间的通信
[root@k8s231 ~]# kubectl exec buffes-ds-m5zd8 -- ping -c 3 10.100.2.2
PING 10.100.2.2 (10.100.2.2): 56 data bytes
64 bytes from 10.100.2.2: seq=0 ttl=62 time=0.417 ms
64 bytes from 10.100.2.2: seq=1 ttl=62 time=0.299 ms
64 bytes from 10.100.2.2: seq=2 ttl=62 time=0.404 ms
--- 10.100.2.2 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.299/0.373/0.417 ms
7.删除ds资源
[root@k8s231 ~]# kubectl delete -f buffes-ds.yaml
#重启机器后harbor服务无法正常启动,解决办法
[root@harbor ~]# reboot
#删除储存卷
[root@harbor ~]# cd /buffes/softwares/harbor/
[root@harbor /buffes/softwares/harbor]#
[root@harbor /buffes/softwares/harbor]# docker-compose down -v -t 1
#重新再启动
[root@harbor /buffes/softwares/harbor]# docker-compose up -d
浏览器访问
harbor.buffes.com
作业:
(1)完成的所有练习并整理思维导图;
(2)手绘K8S架构图并能够清楚每个组件的作用;
进阶作业:
使用ansible基于kubeadm一键构建K8S集群。
小的,创作不容易。给个点点关注
多多少少给点吧
