kubeadm 快速搭建

2023-12-28 17:17:23

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

kubeadm更适合中下企业的业务集群。

master docker kubelet bubeadm kubectl flannel

node1 docker kubelet bubeadm kubectl flannel

node2 docker kubelet bubeadm kubectl flannel

harbor节点:docker docker-compose harbor

systemctl stop firewalld

systemctl disable firewalld

setenforce 0

清除iptables

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

在master node01 node02执行

加载 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

改名:

映射:

修改主机名

hostnamectl set-hostname master01

hostnamectl set-hostname node01

hostnamectl set-hostname node02

做映射:

内核优化,

cat > /etc/sysctl.d/kubernetes.conf

#开启网桥模式,可将网桥的流量传递给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

安装docker:

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

{

"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

安装时间同步:

对123操作

3、所有节点安装kubeadm,kubelet和kubectl

//定义kubernetes源

cat > /etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=Kubernetes

baseurl=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

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

查看初始化需要的镜像

kubeadm config images list --kubernetes-version 1.20.15

pause:特殊的pod。

pause 会在主机上创建一个网络命名空间,在命名空间内可以让其他容器加入这个网络命名空间。

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

kubeadm安装的组件都是以pod的形式在kube-system这个命名空间当中。

kubelet node管理器可以通过系统控制

在master节点

kubeadm init \

--apiserver-advertise-address=192.168.176.61 \

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

初始化集群需使用kubeadm init命令,可以指定具体参数初始化,也可以指定配置文件初始化。

可选参数:

--apiserver-advertise-addres : 声明master节 点的apisever的监听地址。

--image-repository registry.aliyuncs.com/google. containers : 声明拉取镜像的仓库,使用阿里云。

--kubernetes-version=v1 .20.15 k8s集群的版本号

--service-cidr=10.96.0.0/16 \ 所有sevice的对外代理地址都是10.96.0.0/16

pod-network-cidr=10.244.0.0/16 : 所有pod的ip地址网段。

--token-ttI=0 默认的token的有效期,默认是24小时,示永不过期。

在node上执行,加入集群

kubeadm join 192.168.176.61:6443 --token 66wvc6.81dx9nyt1zxrzlmo

--discovery-token-ca-cert-hash sha256:6e095856409c2875d997c9d0f1c49d542fea511eae49c86ad11c560ff3a0c8c6

因为apiserver没有起

起:

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

systemctl restart kubelet

改监听地址:

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

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

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

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

kubectl get cs

kubectl get pods -n kube-system

pending是要在node上弄

部署网络:

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

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

master:

在node1,2:

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 节点创建 flannel 资源

kubectl apply -f kube-flannel.yml

删除node节点

kubectl delete node master01

完成

证书有效期

cd /etc/kubernetes/pki/

查看有效期:

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

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

apiservce只有1年

运行脚本

chmod 777 update-kubeadm-cert.sh

运行

./update-kubeadm-cert.sh all

变成10年

自动补齐

vim /etc/profile

最后一行添加:

可以快照了。

测试pod 资源创建:

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

查看搭建的详细信息:

kubectl describe pod nginx-6799fc88d8-fz9mp

做service对外提供访问:

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

做一个自己的镜像仓库。

在k8s4

cd /opt

mv docker-compose-linux-x86_64 docker-compose

cp docker-compose /usr/local/bin/

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

docker-compose version

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

cd harbor/

cp harbor.yml.tmpl harbor.yml

vim harbor.yml

生成证书

mkdir -p /data/cert

cd /data/cert

#生成私钥

openssl genrsa -des3 -out server.key 2048

输入两遍密码:123456

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

备份私钥

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

访问:

仓库节点快照。

node1,2节点创建目录:

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

在harbor节点把密钥验证目录整个转给node节点:

scp -r data/ root@192.168.176.62:/

scp -r data/ root@192.168.176.63:/

到node节点:

把刚才的生成的密钥文件放入:

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

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

给node节点做映射:

vim /etc/hosts

vim /lib/systemd/system/docker.service

systemctl daemon-reload

systemctl restart docker

在node节点登录:

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

k8s3要上传镜像一样操作

从指定的镜像仓库拉取

kubectl create deployment myapp-test --image=hub.test.com/k8s/nginx:v1 --port=80 --replicas=3

安装dashboard

kubectl apply -f recommended.yaml

创建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

获取token值

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

eyJhbGciOiJSUzI1NiIsImtpZCI6IkppRks1NTdfM2t2RnQ3aktwcGlFdS1qaHhQWklZWm1hOWM5czhTNkZZYmcifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tdGJsa3YiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiZmQ2Y2I4YTUtMDZiMi00Y2E5LWJkYzMtNzVkZTQ5ODQ2YjM2Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.e0BXNC4sQwUflAdyCVxcaNAPlRZjLMCzuf3wZdy2UeBbrJCoO2XNUlEFW4ahz6av5TpPHOilyKt_DbB_dNjJ10OaEgV_eSEAjR1pvXvnAPceOTTkC1SQ2f6r2prTLGZBb4pQKbpQ1NNxZlZkhwq-YFYUcDoVt0WOe6hdsZCJ1t-fiSflQnKYdbWGwQUVfUHfsJCQgrh3zi-dN4PEoiQlFUgyMIsW3gfKATtdaR3G94pHBGkJatLCUWbor90V6gsL_vO3KmVLnPrEAqb5fgdXT-fSohIi-bOF9bfQFNGXGBIbCMlYvDa18phXpFmtPmHmjkU7NQb1O-CvXcxoHx8FZA

查看有没有起:

kubectl get pods -n kubernetes-dashboard

访问:

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