云原生Kubernetes:Kubeadm部署K8S单Master架构

这篇具有很好参考价值的文章主要介绍了云原生Kubernetes:Kubeadm部署K8S单Master架构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、理论

1.kubeadm

2.Kubeadm部署K8S单Master架构

3.环境部署

4.所有节点安装docker

5.所有节点安装kubeadm,kubelet和kubectl

6.部署K8S集群

7.安装dashboard

8.安装Harbor私有仓库

9.内核参数优化方案

二、实验

1.Kubeadm部署K8S单Master架构

2. 部署流程

 3.环境部署

4.所有节点安装docker

5.所有节点安装kubeadm,kubelet和kubectl

6.部署K8S集群

7.安装dashboard

8.安装Harbor私有仓库

三、问题

1.加入k8s集群报错

2.Kubernetes各版本对应支持的docker版本列表

3.Kubernetes 1.24 1.25 集群使用docker作为容器

4.连接拒绝

5.kubeadm join命令将node加入master时报错

6.coredns一直处于ContainerCreating

7.flannel如何分配子网

8.其他机器无法登陆Harbor

四、总结


一、理论

1.kubeadm

(1) 概念

Kubeadm 是一个提供了 kubeadm init 和 kubeadm join 的工具, 作为创建 Kubernetes 集群的 “快捷途径” 的最佳实践。

kubeadm 通过执行必要的操作来启动和运行最小可用集群。 按照设计,它只关注启动引导,而非配置机器。同样的, 安装各种 “锦上添花” 的扩展,例如 Kubernetes Dashboard、 监控方案、以及特定云平台的扩展,都不在讨论范围内。

相反,在 kubeadm 之上构建更高级别以及更加合规的工具, 理想情况下,使用 kubeadm 作为所有部署工作的基准将会更加易于创建一致性集群。

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

(2)管理命令

kubeadm init 用于搭建控制平面节点
kubeadm join 用于搭建工作节点并将其加入到集群中
kubeadm upgrade 用于升级 Kubernetes 集群到新版本
kubeadm config 如果你使用了 v1.7.x 或更低版本的 kubeadm 版本初始化你的集群,则使用 kubeadm upgrade 来配置你的集群
kubeadm token 用于管理 kubeadm join 使用的令牌
kubeadm reset 用于恢复通过 kubeadm init 或者 kubeadm join 命令对节点进行的任何变更
kubeadm certs 用于管理 Kubernetes 证书
kubeadm kubeconfig 用于管理 kubeconfig 文件
kubeadm version 用于打印 kubeadm 的版本信息
kubeadm alpha 用于预览一组可用于收集社区反馈的特性

2.Kubeadm部署K8S单Master架构

(1)架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构


(2)软件包

本次实验所需要的软件:

【免费】K8S单Master节点kubeadm方式(软件与配置文件)资源-CSDN文库

(3)部署流程

1、在所有节点上安装Docker和kubeadm
2、部署Kubernetes Master
3、部署容器网络插件
4、部署 Kubernetes Node,将节点加入Kubernetes集群中
5、部署 Dashboard Web 页面,可视化查看Kubernetes资源
6、部署 Harbor 私有仓库,存放镜像资源

3.环境部署

(1)所有节点,关闭防火墙规则,关闭selinux,关闭swap交换

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
swapoff -a						#交换分区必须要关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab		#永久关闭swap分区,&符号在sed命令中代表上次匹配的结果

(2)加载 ip_vs 模块

for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done

(3)修改主机名

hostnamectl set-hostname master
hostnamectl set-hostname node01
hostnamectl set-hostname node02

所有节点修改hosts文件

vim /etc/hosts
192.168.204.171 master
192.168.204.173 node01
192.168.204.175 node02

(4)调整内核参数

cat > /etc/sysctl.d/kubernetes.conf << EOF
#开启网桥模式,可将网桥的流量传递给iptables链
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
#关闭ipv6协议
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF
 
生效参数
sysctl --system 

4.所有节点安装docker

(1)安装

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 
yum install -y docker-ce docker-ce-cli containerd.io

(2)加速地址(需要修改为自己的)

mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://XXXXXXXX.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  }
}
EOF
#使用Systemd管理的Cgroup来进行资源控制与管理,因为相对Cgroupfs而言,Systemd限制CPU、内存等资源更加简单和成熟稳定。
#日志使用json-file格式类型存储,大小为100M,保存在/var/log/containers目录下,方便ELK等日志系统收集和管理日志。
 
systemctl daemon-reload
systemctl restart docker.service
systemctl enable docker.service 
 
docker info | grep "Cgroup Driver"
Cgroup Driver: systemd

5.所有节点安装kubeadm,kubelet和kubectl

(1)定义kubernetes源

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
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
 
yum install -y kubelet-1.15.1 kubeadm-1.15.1 kubectl-1.15.1

开机自启kubelet

systemctl enable kubelet.service

6.部署K8S集群

(1)查看初始化需要的镜像

kubeadm config images list

(2)在 master 节点上传 kubeadm-basic.images.tar.gz 压缩包至 /opt 目录

cd /opt
tar zxvf kubeadm-basic.images.tar.gz

(3)使用for循环载入镜像

for i in $(ls /opt/kubeadm-basic.images/*.tar); do docker load -i $i; done

(4)复制镜像和脚本到 node 节点,并在 node 节点上执行脚本 bash /opt/load-images.sh

scp -r kubeadm-basic.images root@node01:/opt
scp -r kubeadm-basic.images root@node02:/opt

(5)初始化kubeadm

方法一:

kubeadm config print init-defaults > /opt/kubeadm-config.yaml

修改配置文件
 

cd /opt/
vim kubeadm-config.yaml
......
11 localAPIEndpoint:
12   advertiseAddress: 192.168.204.171		#指定master节点的IP地址
13   bindPort: 6443
......
34 kubernetesVersion: v1.15.1				#指定kubernetes版本号
35 networking:
36   dnsDomain: cluster.local
37   podSubnet: "10.244.0.0/16"				#指定pod网段,10.244.0.0/16用于匹配flannel默认网段
38   serviceSubnet: 10.96.0.0/16			#指定service网段
39 scheduler: {}
--- #末尾再添加以下内容
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs									#把默认的service调度方式改为ipvs模式
kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs | tee kubeadm-init.log
 
#--experimental-upload-certs 参数可以在后续执行加入节点时自动分发证书文件,k8sV1.16版本开始替换为 --upload-certs
#tee kubeadm-init.log 用以输出日志
 
//查看 kubeadm-init 日志
less kubeadm-init.log
 
//kubernetes配置文件目录
ls /etc/kubernetes/
 
//存放ca等证书和密码的目录
ls /etc/kubernetes/pki	

方法二:

kubeadm init \
--apiserver-advertise-address=0.0.0.0 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.15.1 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
--------------------------------------------------------------------------------------------
初始化集群需使用kubeadm init命令,可以指定具体参数初始化,也可以指定配置文件初始化。
可选参数:
--apiserver-advertise-address:apiserver通告给其他组件的IP地址,一般应该为Master节点的用于集群内部通信的IP地址,0.0.0.0表示节点上所有可用地址
--apiserver-bind-port:apiserver的监听端口,默认是6443
--cert-dir:通讯的ssl证书文件,默认/etc/kubernetes/pki
--control-plane-endpoint:控制台平面的共享终端,可以是负载均衡的ip地址或者dns域名,高可用集群时需要添加
--image-repository:拉取镜像的镜像仓库,默认是k8s.gcr.io
--kubernetes-version:指定kubernetes版本
--pod-network-cidr:pod资源的网段,需与pod网络插件的值设置一致。通常,Flannel网络插件的默认为10.244.0.0/16,Calico插件的默认值为192.168.0.0/16;
--service-cidr:service资源的网段
--service-dns-domain:service全域名的后缀,默认是cluster.local
---------------------------------------------------------------------------------------------
 
方法二初始化后需要修改 kube-proxy 的 configmap,开启 ipvs
kubectl edit cm kube-proxy -n=kube-system
修改mode: ipvs
 
 
 
提示:
......
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
 
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.204.171:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:594fd0a687443eb0f161d9ae76efcf27588af78579c8e362d70fc06986f0454b

更改kube-proxy配置

kubectl edit configmap kube-proxy -n kube-system

找到如下部分的内容

   minSyncPeriod: 0s
      scheduler: ""
      syncPeriod: 30s
    kind: KubeProxyConfiguration
    metricsBindAddress: 127.0.0.1:10249
    mode: "ipvs"                          # 加上这个
    nodePortAddresses: null

其中mode原来是空,默认为iptables模式,改为ipvs

scheduler默认是空,默认负载均衡算法为轮询

 编辑完,保存退出

(6)设定kubectl

    kubectl需经由API server认证及授权后方能执行相应的管理操作,kubeadm 部署的集群为其生成了一个具有管理员权限的认证配置文件 /etc/kubernetes/admin.conf,它可由 kubectl 通过默认的 “$HOME/.kube/config” 的路径进行加载。
 

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

在 node 节点上执行 kubeadm join 命令加入群集

kubeadm join 192.168.204.171:6443 --token d3q8kf.wvis2wbfdfymwic4 \
    --discovery-token-ca-cert-hash sha256:6d851b46ccd6c61a81d3aa08eae4971bc7a5ba32dd4918f7981c482e3fdd4d52

(7)所有节点部署网络插件flannel

方法一:

所有节点上传flannel镜像 flannel.tar 到 /opt 目录,master节点上传 kube-flannel.yml 文件

cd /opt
docker load < flannel.tar

在 master 节点创建 flannel 资源

kubectl apply -f kube-flannel.yml 

方法二:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

(8)在master节点查看节点状态(需要等几分钟)

kubectl get nodes
 
kubectl get pods -n kube-system

(9)测试 pod 资源创建

kubectl create deployment nginx --image=nginx

(10)暴露端口提供服务

kubectl expose deployment nginx --port=80 --type=NodePort

(11)测试访问

curl http://node01:30833

(12)扩展3个副本

kubectl scale deployment nginx --replicas=3
kubectl get pods -o wide

7.安装dashboard

(1)所有节点安装dashboard

方法一:

所有节点上传dashboard镜像 dashboard.tar 到 /opt 目录,master节点上传kubernetes-dashboard.yaml文件

cd /opt/
docker load < dashboard.tar
 
kubectl apply -f kubernetes-dashboard.yaml

方法二:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml

(2)查看所有容器运行状态

kubectl get pods,svc -n kube-system -o wide

(3)使用浏览器访问

https://node02:30001/
 
https://192.168.204.175:30001/

(4)创建service account并绑定默认cluster-admin管理员集群角色

kubectl create serviceaccount dashboard-admin -n kube-system
 
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

(5)获取令牌密钥

kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

(6)复制token令牌直接登录网站

8.安装Harbor私有仓库

(1)在192.168.204.176服务器操作

修改主机名

hostnamectl set-hostname hub.david.com

所有节点加上主机名映射

echo '192.168.204.176 hub.david.com' >> /etc/hosts

(2)  安装 docker

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 
yum install -y docker-ce docker-ce-cli containerd.io

私有仓库配置(加速地址需要修改为自己的)

mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://XXXXXXXX.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "insecure-registries": ["https://hub.david.com"]
}
EOF
 
 
 
systemctl start docker
systemctl enable docker

所有 node 节点都修改 docker 配置文件,加上私有仓库配置(加速地址需要修改为自己的)

cat /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://XXXXXXXX.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "insecure-registries": ["https://hub.david.com"]
}
EOF

(3)安装 Harbor

上传 harbor-offline-installer-v1.2.2.tgz 和 docker-compose 文件到 /opt 目录

cd /opt
cp docker-compose /usr/local/bin/
chmod +x /usr/local/bin/docker-compose
tar zxvf harbor-offline-installer-v1.2.2.tgz
cd harbor/
vim harbor.cfg
5  hostname = hub.david.com
9  ui_url_protocol = https
24 ssl_cert = /data/cert/server.crt
25 ssl_cert_key = /data/cert/server.key
59 harbor_admin_password = Harbor12345

 生成证书

mkdir -p /data/cert
cd /data/cert
#生成私钥
openssl genrsa -des3 -out server.key 2048
输入两遍密码:123456
[root@hub cert]# openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:JS
Locality Name (eg, city) [Default City]:NJ
Organization Name (eg, company) [Default Company Ltd]:DAVID
Organizational Unit Name (eg, section) []:DAVID
Common Name (eg, your name or your server's hostname) []:hub.david.com
Email Address []:admin@david.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@hub cert]# 

备份私钥

cp server.key server.key.org

清除私钥密码

openssl rsa -in server.key.org -out server.key
输入私钥密码:123456

签名证书

openssl x509 -req -days 1000 -in server.csr -signkey server.key -out server.crt
chmod +x /data/cert/*
 
cd /opt/harbor/
./install.sh

浏览器访问

浏览器访问:https://hub.david.com
用户名:admin
密码:Harbor12345

在一个node节点上登录harbor

docker login -u admin -p Harbor12345 https://hub.david.com

上传镜像

docker tag nginx:latest hub.david.com/library/nginx:v1
docker push hub.david.com/library/nginx:v1

在master节点上删除之前创建的nginx资源

kubectl delete deployment nginx
 
kubectl run nginx-deployment --image=hub.david.com/library/nginx:v1 --port=80 --replicas=3
 
kubectl expose deployment nginx-deployment --port=30000 --target-port=80
 
kubectl get svc,pods
yum install ipvsadm -y
ipvsadm -Ln

登录测试一下

curl 10.96.14.134:30000
kubectl edit svc nginx-deployment
 
25   type: NodePort						#把调度策略改成NodePort

浏览器访问

kubectl get svc

浏览器访问:

192.168.204.171:30118

192.168.204.173:30118

192.168.204.175:30118

9.内核参数优化方案

cat > /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0									#禁止使用 swap 空间,只有当系统内存不足(OOM)时才允许使用它
vm.overcommit_memory=1							#不检查物理内存是否够用
vm.panic_on_oom=0								#开启 OOM
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963							#指定最大文件句柄数
fs.nr_open=52706963								#仅4.4以上版本支持
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF

二、实验

1.Kubeadm部署K8S单Master架构

(1)环境

表1 环境

master 192.168.204.171 docker、kubeadm、kubelet、kubectl、flannel 4C/4G,cpu核心数要求大于2
node01 192.168.204.173 docker、kubeadm、kubelet、kubectl、flannel 2C/2G
node02 192.168.204.175 docker、kubeadm、kubelet、kubectl、flannel 2C/2G
Harbor节点 192.168.204.176 docker、docker-compose、harbor-offline-v1.2.2 4C/4G

2. 部署流程

1、在所有节点上安装Docker和kubeadm
2、部署Kubernetes Master
3、部署容器网络插件
4、部署 Kubernetes Node,将节点加入Kubernetes集群中
5、部署 Dashboard Web 页面,可视化查看Kubernetes资源
6、部署 Harbor 私有仓库,存放镜像资源

 3.环境部署

(1)所有节点,关闭防火墙规则,关闭selinux,关闭swap交换for i in $(ls 

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

(2)加载 ip_vs 模块

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

(3)修改主机名

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

所有节点修改hosts文件

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

(4)调整内核参数

master

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

node1

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

node2

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

4.所有节点安装docker

(1)安装

安装依赖包

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

添加repo

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构
安装docker

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

(2)加速地址

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

启动

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

5.所有节点安装kubeadm,kubelet和kubectl

(1)定义kubernetes源

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

安装

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

开机自启kubelet

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

6.部署K8S集群

(1)查看初始化需要的镜像

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

(2)在 master 节点上传 kubeadm-basic.images.tar.gz 压缩包至 /opt 目录

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

(3)使用for循环载入镜像

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

(4)复制镜像和脚本到 node 节点,并在 node 节点上执行脚本 bash /opt/load-images.sh

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

(5)初始化kubeadm

方法一:

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

修改配置文件

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构
云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

启动

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构
因老版本问题,如此方法启动失败,需要降级docker版本并采用第二种方法

方法二:

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

kubernetes配置文件目录云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构存放ca等证书和密码的目录

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

(6)设定kubectl

    kubectl需经由API server认证及授权后方能执行相应的管理操作,kubeadm 部署的集群为其生成了一个具有管理员权限的认证配置文件 /etc/kubernetes/admin.conf,它可由 kubectl 通过默认的 “$HOME/.kube/config” 的路径进行加载。
云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

master节点生成token

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

在 node 节点上执行 kubeadm join 命令加入群集

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

查看所有节点(目前状态为NotReady)

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

(7)所有节点部署网络插件flannel

方法一:

所有节点上传flannel镜像 flannel.tar 到 /opt 目录,master节点上传 kube-flannel.yml 文件

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

在 master 节点创建 flannel 资源

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

在master节点查看节点状态(需要等几分钟)

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

测试 pod 资源创建

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

暴露端口提供服务

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

查询service

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

测试访问

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

扩展3个副本

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

7.安装dashboard

(1)所有节点安装dashboard

方法一:

所有节点上传dashboard镜像 dashboard.tar 到 /opt 目录,master节点上传kubernetes-dashboard.yaml文件

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

查看所有容器运行状态

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

使用浏览器访问

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

创建service account并绑定默认cluster-admin管理员集群角色

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

获取令牌密钥

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

需要输入令牌

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

复制token令牌直接登录网站

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

登录成功

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

8.安装Harbor私有仓库

(1)在192.168.204.176服务器操作

修改主机名

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

所有节点加上主机名映射

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

(2)  安装 docker

已安装(经过20到18版本降级处理)

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

修改镜像加速地址,所有 node 节点都修改 docker 配置文件,加上私有仓库配置

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构


启动

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

(3)安装 Harbor

上传 harbor-offline-installer-v1.2.2.tgz 和 docker-compose 文件到 /opt 目录

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

修改配置文件

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

 生成证书,输入两遍密码:123456

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

生成证书

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

备份私钥

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

清除私钥密码

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

签名证书,输入私钥密码:123456

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

浏览器访问

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

登录界面

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

输入账户密码

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

登录成功

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

在一个node节点上登录harbor

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

上传镜像

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

推送成功

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

在master节点上删除之前创建的nginx资源

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

安装

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

登录测试一下

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

把调度策略改成NodePort

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

获取物理机端口映射地址为30118

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

浏览器访问:

192.168.204.171:30118

192.168.204.173:30118

192.168:204.175:30118

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

三、问题

1.加入k8s集群报错

(1)报错

    [WARNING SystemVerification]: this Docker version is not on the list of validated versions: 24.0.5. Latest validated version: 18.09

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

(2)原因分析

此 Docker 版本不在已验证版本列表中:24.0.5。 最新验证版本:18.09

(3)解决方法

分别查看docker和k8s的版本

kubectl version
docker version

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

降低docker版本到18.09

查看当前仓库支持的docker版本:

yum list docker-ce --showduplicates | sort -r

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

选择18.09的版本,降级到18.06版本会报错

语法: yum downgrade --setopt=obsoletes=0 -y docker-ce-v e r s i o n d o c k e r − c e − s e l i n u x − {version} docker-ce-selinux-versiondocker−ce−selinux−{version}

降低docker版本到18.06.3.ce-3.el7
 

yum downgrade --setopt=obsoletes=0 -y docker-ce-18.09.9-3.el7 docker-ce-cli-18.09.9-3.el7 containerd.io

查看降级后版本

systemctl start docker
docker version

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

2.Kubernetes各版本对应支持的docker版本列表

(1)解决

Kubernetes主要做Docker的容器化管理,总结一下如何查看k8s对应支持的docker版本的方法。

在GitHub可以查看所有Kubernetets版本信息:https://github.com/kubernetes/kubernetes/releases


截止2019.08.09最新的版本支持信息:

Kubernetes 1.15.2  –>Docker版本1.13.1、17.03、17.06、17.09、18.06、18.09

Kubernetes 1.15.1  –>Docker版本1.13.1、17.03、17.06、17.09、18.06、18.09

Kubernetes 1.15.0  –>Docker版本1.13.1、17.03、17.06、17.09、18.06、18.09

Kubernetes 1.14.5  –>Docker版本1.13.1、17.03、17.06、17.09、18.06、18.09

Kubernetes 1.14.4  –>Docker版本1.13.1、17.03、17.06、17.09、18.06、18.09

Kubernetes 1.14.3  –>Docker版本1.13.1、17.03、17.06、17.09、18.06、18.09

Kubernetes 1.14.2  –>Docker版本1.13.1、17.03、17.06、17.09、18.06、18.09

Kubernetes 1.14.1  –>Docker版本1.13.1、17.03、17.06、17.09、18.06、18.09

Kubernetes 1.14.0  –>Docker版本1.13.1、17.03、17.06、17.09、18.06、18.09

Kubernetes 1.13.5  –>Docker版本1.11.1、1.12.1、1.13.1、17.03、17.06、17.09、18.06

Kubernetes 1.13.5  –>Docker版本1.11.1、1.12.1、1.13.1、17.03、17.06、17.09、18.06

Kubernetes 1.13.4  –>Docker版本1.11.1、1.12.1、1.13.1、17.03、17.06、17.09、18.06

Kubernetes 1.13.3  –>Docker版本1.11.1、1.12.1、1.13.1、17.03、17.06、17.09、18.06

Kubernetes 1.13.2  –>Docker版本1.11.1、1.12.1、1.13.1、17.03、17.06、17.09、18.06

Kubernetes 1.13.1  –>Docker版本1.11.1、1.12.1、1.13.1、17.03、17.06、17.09、18.06

Kubernetes 1.13.0  –>Docker版本1.11.1、1.12.1、1.13.1、17.03、17.06、17.09、18.06

Kubernetes 1.12.*  –>Docker版本1.11.1、1.12.1、1.13.1、17.03、17.06、17.09、18.06

Kubernetes 1.11.*  –>Docker版本1.11.2到1.13.1、17.03

Kubernetes 1.10.*  –>Docker版本1.11.2到1.13.1、17.03

查看方式:

1)老版本

点击链接进入到GitHub中查找对应的版本后点击  CHANGELOG-1.15.md

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

点进去查找docker versions:(页面现在存在404情况)

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

2)新版本:

点击链接进入到GitHub中查找对应的版本后点击 the CHANGELOG 

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

3.Kubernetes 1.24 1.25 集群使用docker作为容器

(1)问题

在新版本Kubernetes环境(1.24以及以上版本)下官方不在支持docker作为容器运行时了,若要继续使用docker 需要对docker进行配置一番。需要安装cri-docker作为Kubernetes容器。

(2)解决

查看当前容器运行时

# 查看指定节点容器运行时
kubectl  describe node k8s-node1  | grep Container
  Container Runtime Version:  containerd://1.6.8

# 查看所有节点容器运行时
kubectl  describe node  | grep Container
  Container Runtime Version:  containerd://1.6.8
  Container Runtime Version:  containerd://1.6.8
  Container Runtime Version:  containerd://1.6.8
  Container Runtime Version:  containerd://1.6.8
  Container Runtime Version:  containerd://1.6.8
  Container Runtime Version:  containerd://1.6.8
  Container Runtime Version:  containerd://1.6.8
  Container Runtime Version:  containerd://1.6.8

安装docker

# 更新源信息
yum update
# 安装必要软件
yum install -y yum-utils   device-mapper-persistent-data   lvm2

# 写入docker源信息
sudo yum-config-manager \
    --add-repo \
    https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

# 更新源信息并进行安装
yum update
yum install docker-ce docker-ce-cli containerd.io


# 配置加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://XXXXXXXX.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

安装cri-docker

# 由于1.24以及更高版本不支持docker所以安装cri-docker
# 下载cri-docker 
wget  https://ghproxy.com/https://github.com/Mirantis/cri-dockerd/releases/download/v0.2.5/cri-dockerd-0.2.5.amd64.tgz

# 解压cri-docker
tar xvf cri-dockerd-0.2.5.amd64.tgz 
cp cri-dockerd/cri-dockerd  /usr/bin/

# 写入启动配置文件
cat >  /usr/lib/systemd/system/cri-docker.service <<EOF
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket

[Service]
Type=notify
ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.7
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always

StartLimitBurst=3

StartLimitInterval=60s

LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity

TasksMax=infinity
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target
EOF

# 写入socket配置文件
cat > /usr/lib/systemd/system/cri-docker.socket <<EOF
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service

[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker

[Install]
WantedBy=sockets.target
EOF

# 进行启动cri-docker
systemctl daemon-reload ; systemctl enable cri-docker --now

为kubelet配置容器运行时

# 1.25 版本下 所有k8s节点配置kubelet service
cat > /usr/lib/systemd/system/kubelet.service << EOF

[Unit]
Description=Kubernetes Kubelet
Documentation=https://github.com/kubernetes/kubernetes
After=containerd.service
Requires=containerd.service

[Service]
ExecStart=/usr/local/bin/kubelet \\
    --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.kubeconfig  \\
    --kubeconfig=/etc/kubernetes/kubelet.kubeconfig \\
    --config=/etc/kubernetes/kubelet-conf.yml \\
    --container-runtime-endpoint=unix:///run/cri-dockerd.sock  \\
    --node-labels=node.kubernetes.io/node=

[Install]
WantedBy=multi-user.target
EOF


# 1.24 版本下 所有k8s节点配置kubelet service
cat > /usr/lib/systemd/system/kubelet.service << EOF

[Unit]
Description=Kubernetes Kubelet
Documentation=https://github.com/kubernetes/kubernetes
After=containerd.service
Requires=containerd.service

[Service]
ExecStart=/usr/local/bin/kubelet \\
    --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.kubeconfig  \\
    --kubeconfig=/etc/kubernetes/kubelet.kubeconfig \\
    --config=/etc/kubernetes/kubelet-conf.yml \\
    --container-runtime=remote  \\
    --runtime-request-timeout=15m  \\
    --container-runtime-endpoint=unix:///run/cri-dockerd.sock  \\
    --cgroup-driver=systemd \\
    --node-labels=node.kubernetes.io/node= \\
    --feature-gates=IPv6DualStack=true

[Install]
WantedBy=multi-user.target
EOF



# 重启
systemctl daemon-reload
systemctl restart kubelet
systemctl enable --now kubelet

验证

# 查看指定节点容器运行时
kubectl  describe node k8s-node1  | grep Container
  Container Runtime Version:  docker://20.10.17

# 查看所有节点容器运行时
kubectl  describe node  | grep Container
  Container Runtime Version:  containerd://1.6.8
  Container Runtime Version:  containerd://1.6.8
  Container Runtime Version:  containerd://1.6.8
  Container Runtime Version:  containerd://1.6.8
  Container Runtime Version:  containerd://1.6.8
  Container Runtime Version:  containerd://1.6.8
  Container Runtime Version:  containerd://1.6.8
  Container Runtime Version:  docker://20.10.17

4.连接拒绝

(1)报错云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

(2)原因分析

kubectl命令需要使用kubernetes-admin来运行,需要admin.conf文件(conf文件是通过“ kubeadmin init”命令在主节点/etc/kubernetes 中创建),但是从节点没有conf文件,也没有设置 KUBECONFIG =/root/admin.conf环境变量,所以需要复制conf文件到从节点,并设置环境变量就可以了

(3)解决方法

主节点的admin.conf拷贝到从节点,设置环境变量

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

#拷贝admin.conf注意路径
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile

执行

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

成功

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

5.kubeadm join命令将node加入master时报错

(1)报错

节点纳入管理失败,五分钟后超时放弃连接。

出现error execution phase preflight: couldn't validate the identity of the API Server: abort connecting to API servers after timeout of 5m0s错误

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

(2)原因分析

token 过期:

此时需要通过kubedam重新生成token

[root@master opt]# kubeadm token generate
30nu35.cqbsmgdd15xnxh1t


#下面这条命令中会用到该结果,根据token输出添加命令
[root@master opt]# kubeadm token create 30nu35.cqbsmgdd15xnxh1t --print-join-command --ttl=0 
kubeadm join 192.168.204.171:6443 --token 30nu35.cqbsmgdd15xnxh1t     --discovery-token-ca-cert-hash sha256:6d851b46ccd6c61a81d3aa08eae4971bc7a5ba32dd4918f7981c482e3fdd4d52 


k8s api server不可达:

此时需要检查和关闭所有服务器的firewalldselinux

[root@master ~]#setenforce 0
[root@master ~]#sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
[root@master ~]#systemctl disable firewalld --now

(3)解决

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

6.coredns一直处于ContainerCreating

(1)报错

coredns一直处于ContainerCreating状态

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构(2)原因分析

查询pod状态

kubectl describe pods -n kube-system coredns-bccdc95cf-fjskt

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

最后的事件监听为:

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

发现这里报错了:

FailedCreatePodSandBox: Failed create pod sandbox

执行命令查看日志:

sudo journalctl -xe | grep cni

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

 发现为:

ailed to find plugin "flannel" in path [/opt/cni/bin]

然后去/usr/local/bin目录下,发现在master和worker节点忘记拷贝flannel命令了。

(3)解决方法

需要下载CNI插件:CNI plugins v0.8.6

github下载地址:https://github.com/containernetworking/plugins/releases/tag/v0.8.6

(在1.0.0版本后CNI Plugins中没有flannel)

下载后通过xftp 上传到Linux /home目录解压

tar zxvf cni-plugins-linux-amd64-v0.8.6.tgz

1)  node1节点

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

2) node2节点云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

② 复制 flannel 到 /opt/cni/bin/

cp flannel /opt/cni/bin/

1)node1节点云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

2)node2节点

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

成功

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

7.flannel如何分配子网

(1)配置--pod-network-cidr

kubeadm init \
--apiserver-advertise-address=0.0.0.0 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.15.1 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
--------------------------------------------------------------------------------------------
初始化集群需使用kubeadm init命令,可以指定具体参数初始化,也可以指定配置文件初始化。
可选参数:
--apiserver-advertise-address:apiserver通告给其他组件的IP地址,一般应该为Master节点的用于集群内部通信的IP地址,0.0.0.0表示节点上所有可用地址
--apiserver-bind-port:apiserver的监听端口,默认是6443
--cert-dir:通讯的ssl证书文件,默认/etc/kubernetes/pki
--control-plane-endpoint:控制台平面的共享终端,可以是负载均衡的ip地址或者dns域名,高可用集群时需要添加
--image-repository:拉取镜像的镜像仓库,默认是k8s.gcr.io
--kubernetes-version:指定kubernetes版本
--pod-network-cidr:pod资源的网段,需与pod网络插件的值设置一致。通常,Flannel网络插件的默认为10.244.0.0/16,Calico插件的默认值为192.168.0.0/16;

(2)更改kube-proxy配置

更改

kubectl edit configmap kube-proxy -n kube-system

找到如下部分的内容

   minSyncPeriod: 0s
      scheduler: ""
      syncPeriod: 30s
    kind: KubeProxyConfiguration
    metricsBindAddress: 127.0.0.1:10249
    mode: "ipvs"                          # 加上这个
    nodePortAddresses: null

其中mode原来是空,默认为iptables模式,改为ipvs

scheduler默认是空,默认负载均衡算法为轮询

(3)查看

cd /run/flannel/

vim subnet.env 

master节点:

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

node1节点:

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

 node2节点

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

8.其他机器无法登陆Harbor

(1)报错

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

(2)原因分析

配置文件错误

(3)解决方法

检查dockerdaemon.json是否配置了insecure-registries。配置好后,需要使用systemctl reload docker重启docker服务。

修改前:

少一个逗号

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

修改后:

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

使用docker info查看配置

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

修改前:

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

修改后:

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

成功

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

9.pod删除不了

(1) 报错

pod镜像拉取失败一直删除不了

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

(2)原因分析

命令缺少pod


# 加pod
kubectl delete pod nginx-deployment-6959f4b694-nds9n

kubectl delete pod nginx-deployment-6959f4b694-qmpd6

(3)解决

查看rs和deployment以及pod

kubectl get pods -o wide

 kubectl get deployment

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

删除deployment

kubectl delete deployment nginx-deployment

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构
再次查看deployment

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

再次查看pod,发现已成功删除

云原生Kubernetes:Kubeadm部署K8S单Master架构,云原生,kubernetes,架构

四、总结

K8S通过kubeadm安装出来以后都是以Pod方式存在,即底层是以容器方式运行,所以kubelet必须设置开机自启。

使用Systemd管理的Cgroup来进行资源控制与管理,因为相对Cgroupfs而言,Systemd限制CPU、内存等资源更加简单和成熟稳定。文章来源地址https://www.toymoban.com/news/detail-694666.html

到了这里,关于云原生Kubernetes:Kubeadm部署K8S单Master架构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kubernetes(K8s)使用 kubeadm 方式搭建多 master 高可用 K8s 集群

    本篇主要针对上篇文章的单 master 节点的 K8s 集群上搭建多 master 节点集群 和 LB 负载均衡服务器。 Kubernetes(K8S)集群搭建基础入门教程 虚拟机 IP 地址: IP 操作系统 主机名称 192.168.2.121 centos7.9 k8s-master01 192.168.2.124 centos7.9 k8s-master02 192.168.2.125 centos7.9 k8s-node01 192.168.2.126 centos

    2023年04月26日
    浏览(52)
  • 【云原生-K8s-1】kubeadm搭建k8s集群(一主两从)完整教程及kubernetes简介

    🍁 博主简介   🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊 交流社区: 运维交流社区 欢迎大家的加入!   Kubernetes(简称:k8s) 是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,用于管理云平台中多

    2024年02月07日
    浏览(66)
  • 【云原生】Kubeadm部署k8s

    在所有节点上安装Docker和kubeadm 部署Kubernetes Master 部署容器网络插件 部署 Kubernetes Node,将节点加入Kubernetes集群中 部署 Dashboard Web 页面,可视化查看Kubernetes资源 实验环境 服务器 IP地址 主要组件 master 192.168.10.130 docker/kubeadm/kubelet/kubectl/flannel node01 192.168.10.133 docker/kubeadm/kubel

    2024年02月04日
    浏览(46)
  • k8s(kubernetes)的两种部署方式(kubeadm)

    在开始之前,部署Kubernetes集群机器需要满足以下几个条件: 一台或多台机器,操作系统CentOS7.x-86_x64 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多 可以访问外网,需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点禁止swap分区 角色 IP master 192.168.1.11 node1 192.16

    2024年02月22日
    浏览(58)
  • Kubernetes技术--使用kubeadm快速部署一个K8s集群

    这里我们配置一个 单master集群 。( 一个Master节点,多个Node节点 ) 1.硬件环境准备 一台或多台机器,操作系统 CentOS7.x-86_x64 。这里我们使用安装了CentOS7的三台虚拟机 硬件配置 : 2GB或更多RAM , 2个CPU或更多CPU , 硬盘30GB或更多 2.主机名称和IP地址规划 3. 初始化准备工作 (1).关

    2024年02月10日
    浏览(58)
  • 【K8S】docker和K8S(kubernetes)理解?docker是什么?K8S架构、Master节点 Node节点 K8S架构图

    一、docker的问世         在LXC(Linux container)Linux容器虚拟技术出现之前,业界网红是虚拟机。虚拟机技术的代表,是VMWare和OpenStack。 虚拟机是什么?         虚拟机其实就是 在你的操作系统里面,装一个软件,然后通过这个软件,再模拟一台甚至多台“子电脑”出来。

    2024年03月26日
    浏览(69)
  • centos安装部署Kubernetes(k8s)步骤使用kubeadm方式

    机器地址: 192.168.0.35 k8s-master 192.168.0.39 k8s-node1 192.168.0.116 k8s-node2 修改每台机器的名字 关闭防火墙和selinux 临时关闭selinux: 永久关闭: 修改selinux为disabled或者permissive 重启生效 配置本地解析 确保每个节点MAC地址和 product_uuid 的唯一性 同步时间 如果各机器上时间都没有问题

    2024年02月06日
    浏览(56)
  • 【云原生K8s】二进制部署单master K8s+etcd集群

                                                    mater节点 master01 192.168.190.10 kube-apiserver kube-controller-manager kube-scheduler etcd                                                 node节点 node01 192.168.190.20 kubelet kube-proxy docker (容器引擎) node02 192.168.190.30 kubelet kube-proxy do

    2024年02月14日
    浏览(59)
  • 【Kubernetes部署篇】Kubeadm方式搭建K8s集群 1.27.0版本

    官方文档: 二进制下载地址 环境规划: pod网段:10.244.0.0/16 service网段:10.10.0.0/16 注意: pod和service网段不可冲突,如果冲突会导致K8S集群安装失败。 主机名 IP地址 操作系统 master-1 16.32.15.200 CentOS7.8 node-1 16.32.15.201 CentOS7.8 node-2 16.32.15.202 CentOS7.8 1、关闭防火墙 2、配置域名解

    2024年02月08日
    浏览(77)
  • 【Kubernetes部署篇】Kubeadm方式搭建K8s集群 1.26.0版本

    官方文档: 二进制下载地址 环境规划: pod网段:10.244.0.0/16 service网段:10.10.0.0/16 注意: pod和service网段不可冲突,如果冲突会导致K8S集群安装失败。 容器运行时本次使用containerd。 主机名 IP地址 操作系统 master-1 16.32.15.200 CentOS7.8 node-1 16.32.15.201 CentOS7.8 node-2 16.32.15.202 CentOS

    2024年02月10日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包