好年 新年 孔明灯 女孩 4k动漫壁纸_彼岸图网

kubernetes安装和调试(1.20.9+docker19.03.0+weave)

学习kubernetes来对项目进行容器化部署。这里使用了VMware创建虚拟机来搭建k8s集群。

VMware:16.1.2,CentOS7,docker:19.03.0,kubeadm:1.20.9,kubectl:1.20.9,kubelet:1.20.9,weave。

CentOS安装

镜像下载

image-20230621094637921

虚拟机创建

下载完成之后打开虚拟机进行安装即可。

image-20230621094846813

image-20230621094921378

image-20230621094946819

image-20230621095009505

image-20230621095031008

image-20230621095128572

image-20230621095227845

image-20230621095249962

image-20230621095315555

image-20230621095334696

image-20230621095350888

image-20230621095407927

image-20230621095420022

image-20230621095432344

image-20230621095446745

image-20230621095530687

image-20230621095541376

到这儿就已经把虚拟机创建完成了,但是还需要配置网络和进行安装。

VMware网络配置

我的设置:

  • master节点IP: 172.31.0.3
  • node01节点IP:172.31.0.4
  • node02节点IP:172.31.0.5
  • 子网掩码:255.255.0.0
  • 网关:172.31.0.2
  • DNS:114.114.114.114

首先是在VMware中设置。

主页—>编辑—>虚拟网络编辑器

image-20230621100402357

image-20230621100454415

需要设置为静态的ip,所以在这儿取消勾选DHCP服务。

image-20230621100701320

至此就设置完VMware了。

CentOS镜像安装

image-20230621100846635

image-20230621100923402

image-20230621101224940

image-20230621101342608

image-20230621101320589

image-20230621101408307

image-20230621101459131

image-20230621101557774

image-20230621101706341

image-20230621101731384

image-20230621101826851

image-20230621101805221

等待安装完成重启即可。

启动之后可以通过命令查看一下虚拟机的ip是否设置正确。

1
ip addr

image-20230621102211920

测试一下网络通不通

1
ping www.baidu.com

image-20230621102320183

可以看到已经ping通了,所以网络没问题,搭建k8s集群需要有master节点和node节点,这次创建了一个master节点,两个node节点。上述演示了创建master节点的过程,node节点的创建同上,记得把ip修改一下。

kuberbetes安装

简单的设置

安装所需工具

1
2
3
sudo yum -y install vim
sudo yum -y install wget

安装并配置 ntpdate,同步时间

1
2
3
4
5
6
7
sudo yum -y install ntpdate
sudo ntpdate ntp1.aliyun.com
sudo systemctl status ntpdate
sudo systemctl start ntpdate
sudo systemctl status ntpdate
sudo systemctl enable ntpdate

将主机名加入hosts文件中

1
sudo vim /etc/hosts

在文件最后加入下面的配置

1
2
3
172.31.0.3  master
172.31.0.4 node01
172.31.0.5 node02

设置安装的基础环境,比如需要关闭防火墙,关闭交换空间,关闭selinux等

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

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

#允许 iptables 检查桥接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

关闭防火墙,或者开通指定端口(这个可以参考这篇☞文章

1
2
3
sudo systemctl stop firewalld.service 
sudo systemctl disable firewalld.service

或者用下面命令打开指定端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 控制面板
firewall-cmd --zone=public --add-port=6443/tcp --permanent # Kubernetes API server 所有
firewall-cmd --zone=public --add-port=2379/tcp --permanent # etcd server client API kube-apiserver, etcd
firewall-cmd --zone=public --add-port=2380/tcp --permanent # etcd server client API kube-apiserver, etcd
firewall-cmd --zone=public --add-port=10250/tcp --permanent # Kubelet API 自身, 控制面
firewall-cmd --zone=public --add-port=10259/tcp --permanent # kube-scheduler 自身
firewall-cmd --zone=public --add-port=10257/tcp --permanent # kube-controller-manager 自身
firewall-cmd --zone=trusted --add-source=172.31.0.3 --permanent # 信任集群中各个节点的IP
firewall-cmd --zone=trusted --add-source=172.31.0.4 --permanent # 信任集群中各个节点的IP
firewall-cmd --zone=trusted --add-source=172.31.0.5 --permanent # 信任集群中各个节点的IP
firewall-cmd --add-masquerade --permanent # 端口转发
firewall-cmd --reload
firewall-cmd --list-all
firewall-cmd --list-all --zone=trusted

# 工作节点
firewall-cmd --zone=public --add-port=10250/tcp --permanent # Kubelet API 自身, 控制面
firewall-cmd --zone=public --add-port=30000-32767/tcp --permanent # NodePort Services† 所有
firewall-cmd --zone=trusted --add-source=172.31.0.3 --permanent # 信任集群中各个节点的IP
firewall-cmd --zone=trusted --add-source=172.31.0.4 --permanent # 信任集群中各个节点的IP
firewall-cmd --zone=trusted --add-source=172.31.0.5 --permanent # 信任集群中各个节点的IP
firewall-cmd --add-masquerade --permanent # 端口转发
firewall-cmd --reload
firewall-cmd --list-all
firewall-cmd --list-all --zone=trusted

docker安装

移除系统自带的docker

1
2
3
4
5
6
7
8
9
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

配置yum源,镜像用的是阿里云

1
2
3
4
5
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装指定版本的docker并启动

1
2
3
yum install -y docker-ce-19.03.0 docker-ce-cli-19.03.0  containerd.io-1.4.6
systemctl enable docker --now

配置加速

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sudo mkdir -p /etc/docker       # 创建文件夹
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://dockerproxy.com",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://ccr.ccs.tencentyun.com",
"https://zv1b39f5.mirror.aliyuncs.com"
],
"insecure-registries": ["172.31.0.66:8088"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

至此docker就安装成功

1
docker version

查看docker版本。

kubeadm安装

安装kubelet、kubeadm、kubectl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 配置k8s 下载的地址
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF

# 安装3大件
sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes

# 启动kubelet
sudo systemctl enable --now kubelet

构建集群

下载镜像

1
2
3
4
5
6
# 将所需镜像加入txt文件中
kubeadm config images list | grep '^k8s.gcr' >imglist.txt

# 由于镜像是国外网站,创建shell脚本将镜像下载并用tag命名为原名称
vi pull.sh

1
2
3
4
5
6
7
#!/bin/bash
for image in $(cat imglist.txt)
do
imagename=$(echo $image | awk -F '/' '{print$NF}')
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imagename
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imagename $image
done
1
2
# 运行脚本下载镜像
bash pull.sh

主节点初始化,只需要在master节点运行即可

1
2
3
4
5
6
7
8
kubeadm init \
--apiserver-advertise-address=172.31.0.3 \
--control-plane-endpoint=master \
--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \
--kubernetes-version v1.20.9 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=192.168.0.0/16

1
2
3
4
5
6
7
8
9
# 以下是各个命令的备注不需要执行
kubeadm init \
--apiserver-advertise-address=172.31.0.3 \ # master 节点ip
--control-plane-endpoint=master \ # 域名值
--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \ # 镜像仓库
--kubernetes-version v1.20.9 \ # k8s 版本
--service-cidr=10.96.0.0/16 \ # 网络范围 一般不用改 网络范围不重叠
--pod-network-cidr=192.168.0.0/16 # k8s 给pod分配网络ip的范围 一般不用改
#所有网络范围不重叠

出现下面的结果即为成功

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 我自己的运行结果

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
# 部署pod网络插件 连接k8s所有网络
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/

You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:
# 加入master节点
kubeadm join cluster-endpoint:6443 --token uu0mpy.fdsjy3wojwwpatyj \
--discovery-token-ca-cert-hash sha256:3d0c32c41667faf5424f6a3506e330bdaa57edda63c3d0f09bb4346c0b7c5b4f \
--control-plane

Then you can join any number of worker nodes by running the following on each as root:
# 加入工作node节点
kubeadm join cluster-endpoint:6443 --token uu0mpy.fdsjy3wojwwpatyj \
--discovery-token-ca-cert-hash sha256:3d0c32c41667faf5424f6a3506e330bdaa57edda63c3d0f09bb4346c0b7c5b4f
设置.kube/config
1
2
3
4
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

使用下面命令可以查看所有pod状态

1
2
kubectl get pod --all-namespaces -o wide

由于网络插件还没安装会有两个pod一直在pending

安装网络插件(weave)

kubernetes文档

weave官网安装

公开镜像加速站

去官网下载weave的yaml文件,查看yaml文件中用到的镜像,由于是通过国外的仓库下载镜像总是因为网络出现下载失败的问题,这里通过用公开的国内镜像加速源来下载,再通过tag修改为国外镜像源下载的名称。

1
2
kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml

1
2
3
4
5
docker pull docker.m.daocloud.io/weaveworks/weave-kube
docker pull docker.m.daocloud.io/weaveworks/weave-npc
docker tag docker.m.daocloud.io/weaveworks/weave-kube weaveworks/weave-kube
docker tag docker.m.daocloud.io/weaveworks/weave-npc weaveworks/weave-npc

镜像下载完成,通过下面命令查看所有的pod,可以看到有两个weave正在初始化,等初始化完成之后之前两个pending中的pod也会创建。

1
2
kubectl get pod --all-namespaces -o wide

至此,集群就构建完成。

测试集群(创建nginx服务)

现在创建nginx服务来测试k8s集群搭建是否成功。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 带 命名空间、Service 的完整版参见:https://jihulab.com/xuxiaowei-cloud/xuxiaowei-cloud/-/blob/main/docs/deployment/nginx-deployment.yaml
cat > nginx.yaml << EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.23.2
ports:
- containerPort: 80

EOF

cat nginx.yaml

kubectl apply -f nginx.yaml

# 编辑
# kubectl edit deployment nginx-deployment

启动成功之后查看是否正常创建pod

1
kubectl get pods --all-namespaces -o wide

image-20230625105531044

1
2
# 控制面板:查看pod,svc
kubectl get pod,svc -o wide

image-20230625105558811

1
2
3
4
5
# 控制面板:设置服务(将多个 nginx-deployment 的 pod 绑定在一起,通过一个 Service 端口统一对外提供)
kubectl expose deployment nginx-deployment --type=NodePort --name=nginx-service

# 控制面板:查看pod,svc
kubectl get pod,svc -o wide

image-20230625105728494

可以看到节点服务已经启动,下面使用节点ip+端口号就可以访问到服务。

image-20230625105944175

集群重置

使用命令将k8s的设置恢复初始化,恢复初始化之后得把$HOME/.kube这个路径删除,不然再次init时会报错。

因为上面在init之后会执行一段命令初始化$HOME/.kube这个文件。

1
2
3
4
5
6
kubeadm reset

sysctl -w net.ipv4.ip_forward=1

rm -rf $HOME/.kube

初始化之后就可以再次用init命令对集群进行初始化,参考上面初始化过程即可。

参考文档

第一篇

博主的视频文章

k8s初始化参考

报错参考1报错参考2

镜像加速站

相关资源

weave的yaml文件(阿里云盘):点击下载