Kubeadmin实现k8s集群:

Kubeadmin来快速搭建一个k8s集群:

二进制搭建适合大集群,50台以上的主机,

但是kubeadm更适合中小企业的业务集群

环境:

Master:20.0.0.71 2核4G 或者4核8G docker kubelet kubectl flannel

Node1:20.0.0.72 2核4G 或者4核8G docker kubelet kubectl flannel

Node2: 20.0.0.73 2核4G docker kubelet kubectl flannel

Harbor节点:20.0.0.74 2核4Gdocker-compose harbor

实验开始:

所有节点

systemctl stop firewalld

setenforce 0

iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

swapoff -a

所有节点

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

改主机名

master1:

hostnamectl set-hostname master01

node1:

hostnamectl set-hostname node01

node2:

hostnamectl set-hostname node02

映射

做内核优化:

vim /etc/sysctl.d/k8s.conf

#开启网桥模式:

net.bridge.bridge-nf-call-ip6tables=1

net.bridge.bridge-nf-call-iptables=1

#网桥的流量传给iptables链,实现地址映射

#关闭ipv6的流量(可选项)

net.ipv6.conf.all.disable_ipv6=1

#根据工作中的实际情况,自定

net.ipv4.ip_forward=1

wq!

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

net.ipv6.conf.all.disable_ipv6=1

net.ipv4.ip_forward=1

sysctl --system

时间同步(全部)

yum install ntpdate -y

ntpdate ntp.aliyun.com

date

所有节点安装docker

资源控制器必须systemd(三台)

mkdir /etc/docker

cat > /etc/docker/daemon.json <<EOF

{

"registry-mirrors": ["https://pkm63jfy.mirror.aliyuncs.com"],

"exec-opts": ["native.cgroupdriver=systemd"],

"log-driver": "json-file",

"log-opts": {

"max-size": "100m"

}

}

EOF

systemctl daemon-reload

systemctl restart docker.service

systemctl enable docker.service

docker info | grep "Cgroup Driver"

Cgroup Driver: systemd

安装kuberctl(三台)

//定义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.20.15 kubeadm-1.20.15 kubectl-1.20.15

//查看初始化需要的镜像

kubeadm config images list --kubernetes-version 1.20.15

k8s.gcr.io/kube-apiserver:v1.20.15

k8s.gcr.io/kube-controller-manager:v1.20.15

k8s.gcr.io/kube-scheduler:v1.20.15

k8s.gcr.io/kube-proxy:v1.20.15

k8s.gcr.io/pause:3.2

k8s.gcr.io/etcd:3.4.13-0

k8s.gcr.io/coredns:1.7.0

取消同步操作

主节点操作:

//查看初始化需要的镜像

kubeadm config images list --kubernetes-version 1.20.15

解析:

Pause:特殊的pod

Pause会在节点上创建一个网络命名空间,其他容器可以加入这个网络命名空间

Pod里面的容器可能使用不同的代码架构编写,可以在一个网络空间里面实现通信,协调这个命名空间里面的资源(实现pod内容器的兼容性)

Kubeadm安装的k8s都是以pod的形式运行在kube-system这个空间当中

Kubeletnode管理器可以进行系统控制

kubeadm init \

--apiserver-advertise-address=20.0.0.71 \

--image-repository registry.aliyuncs.com/google_containers \

--kubernetes-version=v1.20.15 \

--service-cidr=10.96.0.0/16 \

--pod-network-cidr=10.244.0.0/16 \

--token-ttl=0

第二行:声明master节点的apiserver法人监听地址

第三行:声明拉取镜像的仓库,使用阿里云

第四行:k8s的版本号

第五行:所有server的对外代理地址都是10.96.0.0/16

第六行:所有pod的IP地址的网段

第七行:默认的token的有效期,默认是24小时,0表示永不过期

将黑色代码,复制到两个node节点,node1,node2执行

mkdir -p $HOME/.kube

cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

chown (id -u):(id -g) $HOME/.kube/config

systemctl restart kubelet

初始化后需要修改 kube-proxy 的 configmap,开启 ipvs

kubectl edit cm kube-proxy -n=kube-system

修改mode: ipvs

Systemctl restart kublet

kubectl get nodes

kubectl get cs发现集群不健康,更改以下两个文件

修改监听地址

vim /etc/kubernetes/manifests/kube-scheduler.yaml

vim /etc/kubernetes/manifests/kube-controller-manager.yaml

systemctl restart kubelet

kubectl get pods -n kube-system

部署网络(三台)

//所有节点上传 flannel 镜像 flannel.tar 和网络插件 cni-plugins-linux-amd64-v0.8.6.tgz 到 /opt 目录,

master节点上传 kube-flannel.yml 文件

cd /opt

docker load < flannel.tar

mv /opt/cni /opt/cni_bak

mkdir -p /opt/cni/bin

tar zxvf cni-plugins-linux-amd64-v0.8.6.tgz -C /opt/cni/bin

主节点:

//在 master 节点创建 flannel 资源

kubectl apply -f kube-flannel.yml

kubectl get node

删除节点:

kubectl delete node master01

kubectl get pod -n kube-system

证书有效期

#证书有效期的问题,kubeadm默认只有1年:

openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -text | grep Not

openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text | grep Not

chmod 777 update-kubeadm-cert.sh all

./update-kubeadm-cert.sh all

看有效期

运行脚本改日期

赋权,然后运行脚本

//在master节点查看节点状态

kubectl get nodes

kubectl get pods -n kube-system

添加自动补齐

集群已经搭建完毕

验证

创建镜像

kubectl create deployment nginx --image=nginx --replicas=3

kubectl get pods

kubectl describe pod

pod后面加name,可以查看状态

做个server

kubectl get svc

Curl +ip :31038

搭建仓库:

Test4:

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

cd /opt

cp docker-compose /usr/local/bin/

chmod +x /usr/local/bin/docker-compose

tar zxvf harbor-offline-installer-v2.8.1.tgz

cd harbor/

vim harbor.yml

安装 部署与k8s集群对接的Harbor仓库

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

cd /opt

cp docker-compose /usr/local/bin/

chmod +x /usr/local/bin/docker-compose

tar zxvf harbor-offline-installer-v2.8.1.tgz

cd harbor/

vim harbor.yml

hostname = hub.test.com

https:

https port for harbor, default is 443

port: 443

The path of cert and key files for nginx

certificate: /data/cert/server.crt

private_key: /data/cert/server.key

harbor_admin_password = 123456

//生成证书

mkdir -p /data/cert

cd /data/cert

#生成私钥

openssl genrsa -des3 -out server.key 2048

输入两遍密码:123456

openssl genrsa: 用于生成 RSA 密钥。

-des3: 使用 Triple DES 加密算法对生成的私钥进行加密。

-out server.key: 指定生成的私钥文件的名称为 server.key。

2048: 指定 RSA 密钥的位数为 2048 位。

#生成证书签名请求文件

openssl req -new -key server.key -out server.csr

输入私钥密码:123456

输入国家名:CN

输入省名:BJ

输入市名:BJ

输入组织名:TEST

输入机构名:TEST

输入域名:hub.kgc.com

输入管理员邮箱:admin@test.com

其它全部直接回车

#备份私钥

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/

./prepare

./install.sh

在本地使用火狐浏览器访问:https://20.0.0.74

添加例外 -> 确认安全例外

用户名:admin

密码:123456

Node2

mkdir -p /etc/docker/certs.d/hub.test.com/

Harbor操作

scp -r data/ root@20.0.0.72:/

映射

vim /lib/systemd/system/docker.service

##修改

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry=hub.test.com

systemctl daemon-reload

systemctl restart docker

登录

docker login -u admin -p 123456 https://hub.test.com

测试是否成功

docker pull nginx

docker tag nginx:latest hub.test.com/library/nginx:v1

docker push hub.test.com/library/nginx:v1

Node3也是同样的操作

mkdir -p /etc/docker/certs.d/hub.test.com/

scp -r data/ root@20.0.0.73:/

mkdir -p /etc/docker/certs.d/hub.test.com/

cd /data/cert/

cp server.crt server.csr server.key /etc/docker/certs.d/hub.test.com/

cd /etc/docker/certs.d/hub.test.com/

vim /etc/hosts

vim /lib/systemd/system/docker.service

#添加

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry=hub.test.com

systemctl daemon-reload

systemctl restart docker

docker login -u admin -p 123456 https://hub.test.com

演示从仓库拉取镜像

kubectl create deployment nginx --image=hub.test.com/library/nginx:v1 --replicas=3

拉取失败

kubectl get pods

把harbor权限改为公开

即可成功

基于deployments,创建的无法通过delete删除,必须要先删除deployments.apps,如上图所示

绑定到集群,#获取token值

创建用户,获取token

浏览器登录

相关推荐
想学习java初学者15 分钟前
Docker compose部署elasticsearch(单机版)
运维·docker·容器
朱容君1 小时前
Linux系统编程多线程之读写锁讲解
linux·开发语言
大风吹PP凉1 小时前
38配置管理工具(如Ansible、Puppet、Chef)
linux·运维·服务器·ansible·puppet
康熙38bdc2 小时前
Linux 进程间通信——共享内存
linux·运维·服务器
jwybobo20072 小时前
redis7.x源码分析:(3) dict字典
linux·redis
scoone2 小时前
ssh登陆服务器后支持Tab键命令补全
linux·shell
微刻时光2 小时前
Docker部署Nginx
运维·nginx·docker·容器·经验
@东辰2 小时前
【golang-技巧】-自定义k8s-operator-by kubebuilder
开发语言·golang·kubernetes
小安运维日记2 小时前
CKA认证 | Day3 K8s管理应用生命周期(上)
运维·云原生·容器·kubernetes·云计算·k8s
陈小肚2 小时前
k8s 1.28.2 集群部署 docker registry 接入 MinIO 存储
docker·容器·kubernetes