kubeadm创建k8s集群

2023-12-28 17:44:17

kubeadm来快速的搭建一个k8s集群:
二进制搭建适合大集群,50台以上。
kubeadm更适合中下企业的业务集群。

部署框架

master192.168.10.10dockerkubelet kubeadm kubectl flannel
node1192.168.10.20dockerkubelet kubeadm kubectl flannel
node2192.168.10.30dockerkubelet kubeadm kubectl flannel
harbor192.168.10.40docker-compose hargordocker

实验部署

在master node1 node2上都操作

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
swapoff -a
#交换分区必须要关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab
#永久关闭swap分区,&符号在sed命令中代表上次匹配的结果
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
#加载 ip_vs 模块

//修改主机名

hostnamectl set-hostname master01
hostnamectl set-hostname node01
hostnamectl set-hostname node02

//所有节点修改hosts文件

vim /etc/hosts
192.168.10.10 master01
192.168.10.20 node01
192.168.10.30 node02

//调整内核参数

vim /etc/sysctl.d/kubernetes.conf
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

所有节点安装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://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

所有节点安装kubeadm,kubelet和kubectl ?
//定义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
 
//开机自启kubelet
systemctl enable kubelet.service

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

kubeadm config images list --kubernetes-version 1.20.15

在master上

kubeadm init \
--apiserver-advertise-address=192.168.10.10 \
--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

node节点上的操作

在master上

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

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

kubectl get cs

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

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

修改以下内容

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

修改以下内容

systemctl restart kubelet
kubectl get cs

kubectl get nodes

上传文件

node节点flannel.tar、cni-plugins-linux-amd64-v0.8.6.tgz
master节点kube-flannel.yml?

master做node节点时,可以上传flannel.tar、cni-plugins-linux-amd64-v0.8.6.tgz

所有node节点

cd /opt
docker load -i 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 节点

kubectl apply -f kube-flannel.yml 
kubectl get node

#证书有效期的问题,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

在master的/opt/上传 update-kubeadm-cert.sh?

chmod 777 update-kubeadm-cert.sh
./update-kubeadm-cert.sh all
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text | grep Not

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

kubectl get pods -n kube-system

//测试 pod 资源创建
kubectl create deployment nginx --image=nginx
kubectl get pods -o wide

//暴露端口提供服务
kubectl expose deployment nginx --port=80 --type=NodePort

进入pod修改页面
kubectl get svc

//测试访问
curl http://node01:31950

//缩容副本

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

vim /etc/profile
source <(kubectl completion bash)


source /etc/profile

部署docker----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.old
 
#清除私钥密码
openssl rsa -in server.key.old -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/
cd /opt/harbor/

./install.sh
 
在本地使用火狐浏览器访问:https://192.168.10.40
添加例外 -> 确认安全例外
用户名:admin
密码:123456

在所有node节点上

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

//在harbor节点把密钥验证目录整个转给node节点:
scp -r /data/ root@192.168.10.20:/
scp -r /data/ root@192.168.10.30:/

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

vim /lib/systemd/system/docker.service

systemctl daemon-reload
systemctl restart docker
docker login -u admin -p 123456 https://hub.test.com

docker tag nginx:latest hub.test.com/k8s/nginx:v1
docker push hub.test.com/k8s/nginx:v1

部署图形化dashboard

kubectl apply -f recommended.yaml

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

此处访问的时node节点

文章来源:https://blog.csdn.net/qq_61843057/article/details/135264063
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。