1、部署harbor https认证实战

1.1 安装docker

(1)下载docker的rpm包

[root@harbor.oldboyedu.com ~]# yum -y install wget
[root@harbor.oldboyedu.com ~]# wget http://192.168.15.253/Kubernetes/Day01-/softwares/oldboyedu-docker-ce-23_0_1.tar.gz

(2)解压并安装软件包

[root@harbor.oldboyedu.com ~]# tar xf oldboyedu-docker-ce-23_0_1.tar.gz 
[root@harbor.oldboyedu.com ~]# yum -y localinstall oldboyedu-docker-ce-23_0_1/*.rpm

(3)添加自动补全功能

[root@harbor.oldboyedu.com ~]# yum -y install bash-completion
[root@harbor.oldboyedu.com ~]# source /usr/share/bash-completion/bash_completion

(4)配置镜像加速

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://tuv7rqqq.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

(5)验证镜像加速是否成功

[root@harbor.oldboyedu.com ~]# docker info | grep "Registry Mirrors" -A 1
 Registry Mirrors:
  https://tuv7rqqq.mirror.aliyuncs.com/

(6)将docker设置为开机自启动

[root@harbor.oldboyedu.com ~]# systemctl enable --now docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

1.2 安装docker compose

(1)添加epel源

[root@harbor.oldboyedu.com ~]# curl  -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

(2)安装docker-compose

[root@harbor.oldboyedu.com ~]# yum -y install docker-compose

(3)查看docker-compose版本

[root@harbor.oldboyedu.com ~]# 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

1.3 安装harbor

(1)下载harbor软件包

[root@harbor.oldboyedu.com ~]# wget http://192.168.15.253/Kubernetes/Day01-/softwares/harbor-offline-installer-v1.10.10.tgz

(2)创建工作目录

[root@harbor.oldboyedu.com ~]# mkdir -pv /oldboyedu/softwares

(3)加压harbor软件包

[root@harbor.oldboyedu.com ~]# tar xf harbor-offline-installer-v1.10.10.tgz -C /oldboyedu/softwares/

(4)创建证书的工作目录

[root@harbor.oldboyedu.com ~]# mkdir -pv /oldboyedu/softwares/harbor/certs/{ca,server,client}

(5)生成自建CA证书

# 5.1 进入证书目录
[root@harbor.oldboyedu.com ~]# cd /oldboyedu/softwares/harbor/certs/
# 5.2 生成CA私钥
[root@harbor.oldboyedu.com certs]# openssl genrsa -out ca/ca.key 4096
# 5.3 生成ca的自签名证书
[root@harbor.oldboyedu.com certs]# openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=oldboyedu.com" \
 -key ca/ca.key \
 -out ca/ca.crt

(6)生成harbor服务器的证书文件及客户端证书

# 6.1 生成harbor主机的私钥
[root@harbor.oldboyedu.com certs]# openssl genrsa -out server/harbor.oldboyedu.com.key 4096
# 6.2 生成harbor主机的证书申请
[root@harbor.oldboyedu.com certs]# openssl req -sha512 -new \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.oldboyedu.com" \
    -key server/harbor.oldboyedu.com.key \
    -out server/harbor.oldboyedu.com.csr
    
# 6.3 生成x509 v3扩展文件
[root@harbor.oldboyedu.com 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=oldboyedu.com
DNS.2=oldboyedu
DNS.3=harbor.oldboyedu.com
EOF

# 6.4 使用"v3.ext"给harbor主机签发证书
[root@harbor.oldboyedu.com certs]# openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca/ca.crt -CAkey ca/ca.key -CAcreateserial \
    -in server/harbor.oldboyedu.com.csr \
    -out server/harbor.oldboyedu.com.crt
    
# 6.5 将crt文件转换为cert客户端证书文件
[root@harbor.oldboyedu.com certs]# openssl x509 -inform PEM -in server/harbor.oldboyedu.com.crt -out server/harbor.oldboyedu.com.cert

# 6.6 准备docker客户端证书
[root@harbor.oldboyedu.com certs]# cp server/harbor.oldboyedu.com.{cert,key} client/
[root@harbor.oldboyedu.com certs]# cp ca/ca.crt client/
[root@harbor.oldboyedu.com 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.oldboyedu.com.cert
-rw-r--r-- 1 root root 3247 Apr 12 10:09 harbor.oldboyedu.com.key

# 6.7 查看所有证书文件结果
[root@harbor.oldboyedu.com 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.oldboyedu.com.cert
-rw-r--r-- 1 root root 3247 Apr 12 10:09 harbor.oldboyedu.com.key

./server:
total 16
-rw-r--r-- 1 root root 2122 Apr 12 09:47 harbor.oldboyedu.com.cert
-rw-r--r-- 1 root root 2122 Apr 12 09:46 harbor.oldboyedu.com.crt
-rw-r--r-- 1 root root 1716 Apr 12 09:44 harbor.oldboyedu.com.csr
-rw-r--r-- 1 root root 3247 Apr 12 09:43 harbor.oldboyedu.com.key

(7)配置harbor服务器使用证书

# 7.1 切换工作目录
[root@harbor.oldboyedu.com certs]# cd ..
[root@harbor.oldboyedu.com harbor]# pwd
/oldboyedu/softwares/harbor

# 7.2 修改配置文件
[root@harbor.oldboyedu.com harbor]# echo alias yy=\'egrep -v \"\^.*#\|\^\$\"\'  >> /root/.bashrc 
[root@harbor.oldboyedu.com harbor]# source /root/.bashrc
[root@harbor.oldboyedu.com harbor]# yy harbor.yml 
hostname: harbor.oldboyedu.com
...
https:
  port: 443
  certificate: /oldboyedu/softwares/harbor/certs/server/harbor.oldboyedu.com.crt
  private_key: /oldboyedu/softwares/harbor/certs/server/harbor.oldboyedu.com.key
harbor_admin_password: 1
...

(8)安装harbor服务

[root@harbor.oldboyedu.com harbor]# ./install.sh 	

(9)Windows验证harbor的https

# 9.1 windows配置主机解析
# C:\Windows\System32\drivers\etc\hosts
...
10.0.0.250 harbor.oldboyedu.com

# 9.2 浏览器访问
https://harbor.oldboyedu.com

(10)Linux验证harbor的https

# 10.1 配置地址解析
[root@harbor.oldboyedu.com ~]# echo 10.0.0.250 harbor.oldboyedu.com >> /etc/hosts

# 10.2 在docker客户端节点创建自签证书域名存放路径
[root@harbor.oldboyedu.com ~]# mkdir -pv /etc/docker/certs.d/harbor.oldboyedu.com

# 10.3 服务端将证书文件拷贝到客户端docker节点,若不执行该操作,则会报错"x509: certificate signed by unknown authority"
[root@harbor.oldboyedu.com ~]# cp /oldboyedu/softwares/harbor/certs/client/* /etc/docker/certs.d/harbor.oldboyedu.com/
[root@harbor.oldboyedu.com ~]# ll /etc/docker/certs.d/harbor.oldboyedu.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.oldboyedu.com.cert
-rw-r--r-- 1 root root 3247 Apr 12 10:11 harbor.oldboyedu.com.key

# 10.4 登录验证
[root@harbor.oldboyedu.com ~]# docker login -u admin -p 1 harbor.oldboyedu.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

# 10.5 退出登录
[root@harbor.oldboyedu.com ~]# more /root/.docker/config.json
{
	"auths": {
		"harbor.oldboyedu.com": {
			"auth": "YWRtaW46MQ=="
		}
	}
}

[root@harbor.oldboyedu.com ~]# echo YWRtaW46MQ==
YWRtaW46MQ==
[root@harbor.oldboyedu.com ~]# echo YWRtaW46MQ== | base64 -d | more 
admin:1
 
[root@harbor.oldboyedu.com ~]# docker logout harbor.oldboyedu.com
Removing login credentials for harbor.oldboyedu.com
[root@harbor.oldboyedu.com ~]# more /root/.docker/config.json
{
	"auths": {}
}

image-20240612091628802

2、Docker简介

2013年docker开源。
2014年Google关注了docker,容器编排工具Kubernetes(简称K8S)。
	- 可以原生支持docker编排,解决docker编排问题
	- 以集群方式工作;
	2014-03:
	2014-06: 发布版本... k8s采用Golang语言研发。

docker inc ---> 201406 ----> docker swarm
					 ----> docker machine
					 ----> docker compose				   
	2014 ---> coreOS ---> rkt
	----> rkt ---> k8s 
	2014 ---> K8S ----> CNCF组织。 Google,RedHat,.....				   
2017.12 ----> 白热化 ----> Google 占用市场70% + docker swarm 不足20% + 其他编排工具....
	---> coreOS ---> 2018.01 ---> RedHat收购。
	---> RedHat ---> 2019. ---> IBM收购。
	---> docker inc ---> Mirantis ----> 2019收购,对docker swarm最少支持2年+,但是重心放在kubernetes。

image-20240611110636641

Kubernetes集群架构图解
image-20240612143325230

image-20240611133550420

CRI:
Container Runtime Interface
符合CRI的接口的容器均可以运行在K8S集群上。
CNI:
Container Network Interface
使得多个K8S集群节点的容器实现网络互通。

3、kubernetes集群部署方式

image-20240611150253074

image-20240611150142988

目前生产环境部署kubernetes集群主要由两种方式:

- 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/
- 二进制部署:
	从GitHub下载发行版的二进制包,手动部署每个组件,组成kubernetes集群。
	
除了上述介绍的两种方式部署外,还有其他部署方式的途径:

- yum:
     已废弃,目前支持的最新版本为2017年发行的1.5.2版本。
- kind安装:
     kind让你能够在本地计算机上运行Kubernetes。 kind要求你安装并配置好Docker。
     推荐阅读:
     https://kind.sigs.k8s.io/docs/user/quick-start/
- minikube:
     适合开发环境,能够快速在Windows或者Linux构建K8S集群。
     参考链接:
     https://minikube.sigs.k8s.io/docs/
- rancher:
     基于K8S改进发行了轻量级K8S,让K3S孕育而生。
     参考链接:
     https://www.rancher.com/
- KubeSphere:
     青云科技基于开源KubeSphere快速部署K8S集群。
     参考链接:
     https://kubesphere.com.cn
- kuboard:
     也是对k8s进行二次开发的产品,新增了很多独有的功能。
     参考链接: 
     https://kuboard.cn/
- kubeasz:
     使用ansible部署,扩容,缩容kubernetes集群,安装步骤官方文档已经非常详细了。
     参考链接: 
     https://github.com/easzlab/kubeasz/
- 第三方云厂商:
      比如aws,阿里云,腾讯云,京东云等云厂商均有K8S的相关SAAS产品。
- 更多的第三方部署工具:
      参考链接:
      https://landscape.cncf.io/

image-20240611160030163

4、K8S所有节点环境准备

(1)虚拟机操作系统环境准备
参考链接:
https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

(2)关闭swap分区

# 2.1 临时关闭
swapoff -a && sysctl -w vm.swappiness=0
# 2.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
	
# 7.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

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/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

# 7.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

		注意,如果网速慢的小伙伴,可以直接使用我下载好的软件包,执行操作如下:

curl -o oldboyedu-docker-rpm-20_10_24.tar.gz http://192.168.15.253/Kubernetes/Day01-/softwares/oldboyedu-docker-rpm-20_10_24.tar.gz
tar xf oldboyedu-docker-rpm-20_10_24.tar.gz && yum -y localinstall oldboyedu-docker-rpm-20.10/*.rpm && rm -rf oldboyedu-docker-rpm-20*

# 7.3 配置docker优化
mkdir -pv /etc/docker && cat <<EOF | tee /etc/docker/daemon.json
{
  "registry-mirrors": ["https://tuv7rqqq.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

# 7.4 将harbor服务器的客户端证书拷贝到k8s集群 *****
# 7.4.1 k8s所有节点创建自建证书目录
mkdir -pv /etc/docker/certs.d/harbor.oldboyedu.com

# 7.4.2 登录harbor服务器将自建证书拷贝到K8S集群的所有节点
[root@harbor.oldboyedu.com ~]# scp /oldboyedu/softwares/harbor/certs/client/* 10.0.0.231:/etc/docker/certs.d/harbor.oldboyedu.com
[root@harbor.oldboyedu.com ~]# scp /oldboyedu/softwares/harbor/certs/client/* 10.0.0.232:/etc/docker/certs.d/harbor.oldboyedu.com
[root@harbor.oldboyedu.com ~]# scp /oldboyedu/softwares/harbor/certs/client/* 10.0.0.233:/etc/docker/certs.d/harbor.oldboyedu.com

# 7.5 配置docker开机自启动
systemctl enable --now docker
systemctl status docker

(8)禁用防火墙

systemctl disable --now firewalld

(9)禁用selinux

sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config 
grep ^SELINUX= /etc/selinux/config

(10)配置host解析

cat >> /etc/hosts <<'EOF'
10.0.0.231        k8s231.oldboyedu.com
10.0.0.232        k8s232.oldboyedu.com
10.0.0.233        k8s233.oldboyedu.com
10.0.0.250        harbor.oldboyedu.com
EOF
cat /etc/hosts

(11)验证是否能够登录harbor仓库

[root@k8s231.oldboyedu.com ~]# docker login -u admin -p 1 harbor.oldboyedu.com

软件包作用说明

你需要在每台机器上安装以下的软件包:
	kubeadm:
		用来初始化集群的指令。
	kubelet:
		在集群中的每个节点上用来启动Pod和容器等。
	kubectl:
		用来与集群通信的命令行工具。
			
kubeadm不能帮你安装或者管理kubelet或kubectl,所以你需要确保它们与通过kubeadm安装的控制平面(master)的版本相匹配。 如果不这样做,则存在发生版本偏差的风险,可能会导致一些预料之外的错误和问题。 

然而,控制平面与kubelet间的相差一个次要版本不一致是支持的,但kubelet的版本不可以超过"API SERVER"的版本。 例如,1.7.0版本的kubelet可以完全兼容1.8.0版本的"API SERVER",反之则不可以。

5、所有节点安装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

注意,如果网速慢的小伙伴,可以直接使用我下载好的软件包,执行操作如下:
curl -o oldboyedu-kubeadmin-rpm-1_23_17.tar.gz  http://192.168.15.253/Kubernetes/Day01-/softwares/oldboyedu-kubeadmin-rpm-1_23_17.tar.gz
tar xf oldboyedu-kubeadmin-rpm-1_23_17.tar.gz && yum -y localinstall oldboyedu-kubeadmin-rpm-1_23_17/*.rpm && rm -rf oldboyedu-kubeadmin-rpm-1_23_17*

(4)启动kubelet服务(若服务启动失败时正常现象,其会自动重启,因为缺失配置文件,初始化集群后恢复!此步骤可跳过!)

systemctl enable --now kubelet
systemctl status kubelet

参考链接:
	https://kubernetes.io/zh/docs/tasks/tools/install-kubectl-linux/

6、初始化control plan节点

(1)使用kubeadm初始化master节点

[root@k8s231.oldboyedu.com ~]# 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=oldboyedu.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集群(只在master节点)

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

(3)查看集群节点

[root@k8s231.oldboyedu.com ~]# kubectl get componentstatuses
[root@k8s231.oldboyedu.com ~]# kubectl get cs

7、配置所有worker节点加入k8s集群

(1)所有节点加入K8S集群,注意,你的token和我不一样哟~(******,复制你自己的token)

[root@k8s232.oldboyedu.com ~]# kubeadm join 10.0.0.231:6443 --token uh78rb.9nyqap0zrn5sj7wd \
	--discovery-token-ca-cert-hash sha256:27b747e1e77c00f5684301a5e76a51eb4634fb80a76e7bd30113ac347e03aaf1

[root@k8s233.oldboyedu.com ~]# kubeadm join 10.0.0.231:6443 --token uh78rb.9nyqap0zrn5sj7wd \
	--discovery-token-ca-cert-hash sha256:27b747e1e77c00f5684301a5e76a51eb4634fb80a76e7bd30113ac347e03aaf1

(2)查看现有的节点

[root@k8s231.oldboyedu.com ~]# kubectl get nodes
NAME                   STATUS     ROLES                  AGE     VERSION
k8s231.oldboyedu.com   NotReady   control-plane,master   15m     v1.23.17
k8s232.oldboyedu.com   NotReady   <none>                 3m39s   v1.23.17
k8s233.oldboyedu.com   NotReady   <none>                 3m6s    v1.23.17
  • 添加kubectl的自动补全功能
[root@k8s231.oldboyedu.com ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc && source ~/.bashrc

8、安装网络插件并验证连通性

(1)下载flannel的资源清单

[root@k8s231.oldboyedu.com ~]# wget http://192.168.15.253/Kubernetes/Day01-/config/kube-flannel.yml

(2)安装flannel(值得注意的是,如果你的Pod网络和我的不一样"10.100.0.0/16",请自行修改配置文件)

[root@k8s231.oldboyedu.com ~]# kubectl apply -f kube-flannel.yml 

(3)检查flannel组件是否正常,均处于"Running"状态!

[root@k8s231.oldboyedu.com ~]# kubectl get pods -A -o wide| grep kube-flannel
kube-flannel   kube-flannel-ds-c9k8g                          1/1     Running   0          77s   10.0.0.232   k8s232.oldboyedu.com   <none>           <none>
kube-flannel   kube-flannel-ds-kgndk                          1/1     Running   0          77s   10.0.0.233   k8s233.oldboyedu.com   <none>           <none>
kube-flannel   kube-flannel-ds-nc67r                          1/1     Running   0          77s   10.0.0.231   k8s231.oldboyedu.com   <none>           <none>
[root@k8s231.oldboyedu.com ~]# 

(4)编写ds资源清单

[root@k8s231.oldboyedu.com ~]# cat oldboyedu-linux85-ds.yaml 
kind: DaemonSet
apiVersion: apps/v1
metadata:
  name: linux85-ds
spec:
  selector:
    matchLabels:
      school: oldboyedu
      class: linux85
  template:
    metadata:
      labels:
        school: oldboyedu
        class: linux85
    spec:
      containers:
      - image: alpine
        stdin: true
        name: mylinux 

(5)创建ds资源

[root@k8s231.oldboyedu.com ~]# kubectl apply -f oldboyedu-linux85-ds.yaml 
daemonset.apps/linux85-ds created
[root@k8s231.oldboyedu.com ~]# kubectl get pods -o wide
NAME               READY   STATUS    RESTARTS   AGE     IP           NODE                   NOMINATED NODE   READINESS GATES
linux85-ds-2ks6n   1/1     Running   0          2m48s   10.100.2.2   k8s233.oldboyedu.com   <none>           <none>
linux85-ds-m5zd8   1/1     Running   0          2m49s   10.100.1.2   k8s232.oldboyedu.com   <none>           <none>

(6)测试跨节点Pod之间的通信

[root@k8s231.oldboyedu.com ~]# kubectl exec  linux85-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
[root@k8s231.oldboyedu.com ~]# 

(7)删除ds资源

[root@k8s231.oldboyedu.com ~]# kubectl delete -f oldboyedu-linux85-ds.yaml 
daemonset.apps "linux85-ds" deleted

9、重启harbor无法访问服务问题解决

[root@harbor ~]# cd /oldboyedu/softwares/harbor/
[root@harbor harbor]# ll
总用量 597996
drwxr-xr-x 5 root root        58 2024-06-12 09:06 certs
drwxr-xr-x 3 root root        20 2024-06-12 09:09 common
-rw-r--r-- 1 root root      3398 2022-01-12 12:08 common.sh
-rw-r--r-- 1 root root      5412 2024-06-12 09:09 docker-compose.yml
-rw-r--r-- 1 root root 612306524 2022-01-12 12:09 harbor.v1.10.10.tar.gz
-rw-r--r-- 1 root root      5962 2024-06-12 09:09 harbor.yml
-rwxr-xr-x 1 root root      2284 2022-01-12 12:08 install.sh
-rw-r--r-- 1 root root     11347 2022-01-12 12:08 LICENSE
-rwxr-xr-x 1 root root      1750 2022-01-12 12:08 prepare
[root@harbor harbor]# docker-compose ps
      Name                     Command               State                   Ports                
--------------------------------------------------------------------------------------------------
harbor-core         /harbor/harbor_core              Up                                           
harbor-db           /docker-entrypoint.sh            Up      5432/tcp                             
harbor-jobservice   /harbor/harbor_jobservice  ...   Up                                           
harbor-log          /bin/sh -c /usr/local/bin/ ...   Up      127.0.0.1:1514->10514/tcp            
harbor-portal       nginx -g daemon off;             Up      8080/tcp                             
nginx               nginx -g daemon off;             Up      0.0.0.0:80->8080/tcp,:::80->8080/tcp,
                                                             0.0.0.0:443->8443/tcp,:::443->8443/tc
                                                             p                                    
redis               redis-server /etc/redis.conf     Up      6379/tcp                             
registry            /home/harbor/entrypoint.sh       Up      5000/tcp                             
registryctl         /home/harbor/start.sh            Up                

[root@harbor harbor]# docker-compose ps
      Name                     Command                State               Ports          
-----------------------------------------------------------------------------------------
harbor-core         /harbor/harbor_core              Exit 128                            
harbor-db           /docker-entrypoint.sh            Exit 137                            
harbor-jobservice   /harbor/harbor_jobservice  ...   Exit 128                            
harbor-log          /bin/sh -c /usr/local/bin/ ...   Up         127.0.0.1:1514->10514/tcp
harbor-portal       nginx -g daemon off;             Exit 128                            
nginx               nginx -g daemon off;             Exit 128                            
redis               redis-server /etc/redis.conf     Exit 128                            
registry            /home/harbor/entrypoint.sh       Exit 137                            
registryctl         /home/harbor/start.sh            Exit 137    

[root@harbor harbor]# docker-compose down  -v -t 1
Stopping harbor-log ... done
Removing harbor-jobservice ... done
Removing nginx             ... done
Removing harbor-core       ... done
Removing harbor-db         ... done
Removing redis             ... done
Removing registry          ... done
Removing registryctl       ... done
Removing harbor-portal     ... done
Removing harbor-log        ... done
Removing network harbor_harbor

# 启动
[root@harbor harbor]# docker-compose up -d
[root@harbor harbor]# docker-compose ps
      Name                     Command               State                   Ports                
--------------------------------------------------------------------------------------------------
harbor-core         /harbor/harbor_core              Up                                           
harbor-db           /docker-entrypoint.sh            Up      5432/tcp                             
harbor-jobservice   /harbor/harbor_jobservice  ...   Up                                           
harbor-log          /bin/sh -c /usr/local/bin/ ...   Up      127.0.0.1:1514->10514/tcp            
harbor-portal       nginx -g daemon off;             Up      8080/tcp                             
nginx               nginx -g daemon off;             Up      0.0.0.0:80->8080/tcp,:::80->8080/tcp,
                                                             0.0.0.0:443->8443/tcp,:::443->8443/tc
                                                             p                                    
redis               redis-server /etc/redis.conf     Up      6379/tcp                             
registry            /home/harbor/entrypoint.sh       Up      5000/tcp                             
registryctl         /home/harbor/start.sh            Up   

今日作业:
(1)完成的所有练习并整理思维导图;
(2)手绘K8S架构图并能够清楚每个组件的作用;

扩展作业:
使用ansible的基于kubeadm一键构建K8S集群。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐