Déploiement de k8s-kubeadm et de l'entrepôt privé Harbour

Déployer k8s-kubeadm

Préparation environnementale

héberger IP Composants
Maître 192.168.100.135 docker 、 kubeadm 、 kubelet 、 kubectl 、 flanelle
nœud01 192.168.100.142 docker 、 kubeadm 、 kubelet 、 kubectl 、 flanelle
nœud02 192.168.100.140 docker 、 kubeadm 、 kubelet 、 kubectl 、 flanelle
Nœud portuaire 192.168.100.141 docker, docker-compose, harbour-offline-v1.2.2

avoir besoin:

1. Installez Docker et kubeadm sur tous les nœuds
2. Déployez Kubernetes Master
3. Déployez les plug-ins du réseau de conteneurs
4. Déployez le nœud Kubernetes, ajoutez des nœuds au cluster Kubernetes
5. Déployez la page Web du tableau de bord, visualisez les ressources Kubernetes
6. Déployez l'entrepôt privé Harbor, stocker des ressources d'image

Déploiement de l'environnement

//Tous les nœuds, fermer les règles de pare-feu, fermer selinux, fermer le 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命令中代表上次匹配的结果

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

//modifier le nom d'hôte

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

//Tous les nœuds modifient le fichier hosts

vim /etc/hosts
192.168.100.135 master01
192.168.100.142 node01
192.168.100.141 node02

// ajuste les paramètres du noyau

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

//paramètre valide

sysctl --system  

Installer docker sur tous les nœuds

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://6ijb8ubo.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

Installez kubeadm, kubelet et kubectl sur tous les nœuds

//定义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.11 kubeadm-1.20.11 kubectl-1.20.11

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

Déployer le cluster K8S

//Afficher l'image requise pour l'initialisation

kubeadm config images list

//Télécharger l'archive v1.20.11.zip dans le répertoire /opt sur le nœud maître

unzip v1.20.11.zip -d /opt/k8s
cd /opt/k8s/v1.20.11
for i in $(ls *.tar); do docker load -i $i; done

// Copiez l'image et le script sur le nœud du nœud et exécutez le script sur le nœud du nœud pour charger le fichier image

scp -r /opt/k8s root@node01:/opt
scp -r /opt/k8s root@node02:/opt

// Initialiser kubeadm

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

cd /opt/
vim kubeadm-config.yaml
......
11 localAPIEndpoint:
12   advertiseAddress: 192.168.100.135		#指定master节点的IP地址
13   bindPort: 6443
......
34 kubernetesVersion: v1.20.11				#指定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									#把默认的kube-proxy调度方式改为ipvs模式

kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.log
#--experimental-upload-certs 参数可以在后续执行加入节点时自动分发证书文件,k8sV1.16版本开始替换为 --upload-certs
#tee kubeadm-init.log 用以输出日志

[Échec du transfert d'image du lien externe, le site source peut avoir un mécanisme anti-leech, il est recommandé d'enregistrer l'image et de la télécharger directement (img-pw8tQGmR-1649159008784) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \k8s\k8s- déploiement de kubeadmin\1.bmp)]

//查看 kubeadm-init 日志
less kubeadm-init.log

//kubernetes配置文件目录
ls /etc/kubernetes/

//存放ca等证书和密码的目录
ls /etc/kubernetes/pki		

//Définir kubectl

kubectl doit être authentifié et autorisé par le serveur d'API avant de pouvoir effectuer les opérations de gestion correspondantes. Le cluster déployé par kubeadm génère un fichier de configuration d'authentification /etc/kubernetes/admin.conf avec des privilèges d'administrateur pour celui-ci, qui peut être utilisé par kubectl via le "$ HOME/.kube/config" par défaut à charger.

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

[Échec du transfert d'image du lien externe, le site source peut avoir un mécanisme anti-leech, il est recommandé d'enregistrer l'image et de la télécharger directement (img-pENJxHiG-1649159008785) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \k8s\k8s- déploiement de kubeadmin\2.bmp)]

// À ce moment, kubectl get cs constate que le cluster n'est pas sain, modifiez les deux fichiers suivants

[Échec du transfert d'image du lien externe, le site source peut avoir un mécanisme anti-leech, il est recommandé d'enregistrer l'image et de la télécharger directement (img-DGRz4Jts-1649159008786) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \k8s\k8s- kubeadmin deploy\3.bmp)]

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

[Échec du transfert d'image du lien externe, le site source peut avoir un mécanisme anti-leech, il est recommandé d'enregistrer l'image et de la télécharger directement (img-YVXX0uIc-1649159008786) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \k8s\k8s- kubeadmin deploy\4.bmp)]

[Échec du transfert d'image du lien externe, le site source peut avoir un mécanisme anti-leech, il est recommandé d'enregistrer l'image et de la télécharger directement (img-cTr8AAMS-1649159008787) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \k8s\k8s- kubeadmin deploy\5.bmp)]

[Échec du transfert d'image du lien externe, le site source peut avoir un mécanisme anti-leech, il est recommandé d'enregistrer l'image et de la télécharger directement (img-GpegIv3k-1649159008788) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \k8s\k8s- kubeadmin deploy\6.bmp)]

//Tous les nœuds déploient la flanelle de plug-in réseau

//所有节点上传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


//在 node 节点上执行 kubeadm join 命令加入群集
kubeadm join 192.168.80.10:6443 --token rc0kfs.a1sfe3gl4dvopck5 \
    --discovery-token-ca-cert-hash sha256:864fe553c812df2af262b406b707db68b0fd450dc08b34efb73dd5a4771d37a2

[Échec du transfert d'image du lien externe, le site source peut avoir un mécanisme anti-leech, il est recommandé d'enregistrer l'image et de la télécharger directement (img-Vaaw3XrX-1649159008788) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \k8s\k8s- kubeadmin deploy\7.bmp)]

//Afficher l'état du nœud sur le nœud maître

kubectl get nodes

kubectl get pods -n kube-system
NAME                             READY   STATUS    RESTARTS   AGE
coredns-bccdc95cf-c9w6l          1/1     Running   0          71m
coredns-bccdc95cf-nql5j          1/1     Running   0          71m
etcd-master                      1/1     Running   0          71m
kube-apiserver-master            1/1     Running   0          70m
kube-controller-manager-master   1/1     Running   0          70m
kube-flannel-ds-amd64-kfhwf      1/1     Running   0          2m53s
kube-flannel-ds-amd64-qkdfh      1/1     Running   0          46m
kube-flannel-ds-amd64-vffxv      1/1     Running   0          2m56s
kube-proxy-558p8                 1/1     Running   0          2m53s
kube-proxy-nwd7g                 1/1     Running   0          2m56s
kube-proxy-qpz8t                 1/1     Running   0          71m
kube-scheduler-master            1/1     Running   0          70m

[Échec du transfert d'image du lien externe, le site source peut avoir un mécanisme anti-leech, il est recommandé d'enregistrer l'image et de la télécharger directement (img-KwV37ouJ-1649159008789) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \k8s\k8s- déploiement de kubeadmin\8.bmp)]

//Tester la création de ressources de pod

kubectl create deployment nginx --image=nginx

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

kubectl get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP        25h
nginx        NodePort    10.96.15.132   <none>        80:32698/TCP   4s

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

//扩展3个副本
kubectl scale deployment nginx --replicas=3
kubectl get pods -o wide
NAME                     READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
nginx-554b9c67f9-9kh4s   1/1     Running   0          66s   10.244.1.3   node01   <none>           <none>
nginx-554b9c67f9-rv77q   1/1     Running   0          66s   10.244.2.2   node02   <none>           <none>
nginx-554b9c67f9-zr2xs   1/1     Running   0          17m   10.244.1.2   node01   <none>           <none>

[Échec du transfert d'image du lien externe, le site source peut avoir un mécanisme anti-leech, il est recommandé d'enregistrer l'image et de la télécharger directement (img-g3nnnKNj-1649159008789) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \k8s\k8s- kubeadmin deploy\9.bmp)]

[Échec du transfert d'image du lien externe, le site source peut avoir un mécanisme anti-leech, il est recommandé d'enregistrer l'image et de la télécharger directement (img-YsqpcAQr-1649159008790) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \k8s\k8s- kubeadmin deploy\10.bmp)]

Déployer le tableau de bord

//在 master01 节点上操作
#上传 recommended.yaml 文件到 /opt/k8s 目录中
cd /opt/k8s
vim recommended.yaml
#默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部:
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001     #添加
  type: NodePort          #添加
  selector:
    k8s-app: kubernetes-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
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

#使用输出的token登录Dashboard
https://NodeIP:30001

[Échec du transfert d'image du lien externe, le site source peut avoir un mécanisme anti-leech, il est recommandé d'enregistrer l'image et de la télécharger directement (img-sgU0XYJo-1649159008790) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \k8s\k8s- déploiement de kubeadmin\11.bmp)]

[Le transfert d'image du lien externe a échoué, le site source peut avoir un mécanisme anti-leech, il est recommandé d'enregistrer l'image et de la télécharger directement (img-V5PaSRw3-1649159008791) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\ linux\k8s\k8s- déploiement kubeadmin\12.bmp)]

Installer le référentiel privé Harbor

Préparation environnementale

//修改主机名
hostnamectl set-hostname hub.kgc.com

//所有节点加上主机名映射
echo '192.168.100.141 hub.kgc.com' >> /etc/hosts

//安装 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://6ijb8ubo.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "insecure-registries": ["https://hub.kgc.com"]
}
EOF

systemctl start docker
systemctl enable docker

//Tous les nœuds de nœud modifient le fichier de configuration du menu fixe, ainsi que la configuration de l'entrepôt privé

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

systemctl daemon-reload
systemctl restart docker

//Installer Harbor
//Télécharger les fichiers harbour-offline-installer-v1.2.2.tgz et docker-compose dans le répertoire /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.kgc.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

[Échec du transfert d'image du lien externe, le site source peut avoir un mécanisme anti-leech, il est recommandé d'enregistrer l'image et de la télécharger directement (img-FH2Em9D1-1649159008792) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \k8s\k8s- déploiement de kubeadmin\13.bmp)]

[Échec du transfert d'image du lien externe, le site source peut avoir un mécanisme anti-leech, il est recommandé d'enregistrer l'image et de la télécharger directement (img-KQZ5Kckk-1649159008792) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \k8s\k8s- déploiement de kubeadmin\14.bmp)]

génération de certificat

//生成证书
mkdir -p /data/cert
cd /data/cert
#生成私钥
openssl genrsa -des3 -out server.key 2048
输入两遍密码:123456

#生成证书签名请求文件
openssl req -new -key server.key -out server.csr
输入私钥密码:123456
输入国家名:CN
输入省名:BJ
输入市名:BJ
输入组织名:KGC
输入机构名:KGC
输入域名:hub.kgc.com
输入管理员邮箱:[email protected]
其它全部直接回车

[Le transfert d'image du lien externe a échoué, le site source peut avoir un mécanisme anti-leech, il est recommandé de sauvegarder l'image et de la télécharger directement (img-O4tugqnA-1649159008793) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\ linux\k8s\k8s- déploiement kubeadmin\15.bmp)]

#备份私钥
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.kgc.com
用户名:admin
密码:Harbor12345

[Échec du transfert d'image du lien externe, le site source peut avoir un mécanisme anti-leech, il est recommandé d'enregistrer l'image et de la télécharger directement (img-9ZS8NBJH-1649159008794) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \k8s\k8s- déploiement de kubeadmin\16.bmp)]

//在一个node节点上登录harbor
docker login -u admin -p Harbor12345 https://hub.kgc.com

//上传镜像
docker tag nginx:latest hub.kgc.com/library/nginx:v1
docker push hub.kgc.com/library/nginx:v1

[Échec du transfert d'image du lien externe, le site source peut avoir un mécanisme anti-leech, il est recommandé d'enregistrer l'image et de la télécharger directement (img-RZL0NLnI-1649159008794) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \k8s\k8s- déploiement de kubeadmin\17.bmp)]

//Suppression de la ressource nginx précédemment créée sur le nœud maître

kubectl delete deployment nginx

kubectl run nginx-deployment --image=hub.kgc.com/library/nginx:v1 --port=80 --replicas=3

kubectl expose deployment nginx-deployment --port=30000 --target-port=80
kubectl get svc,pods
NAME                       TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)     AGE
service/kubernetes         ClusterIP   10.96.0.1       <none>        443/TCP     10m
service/nginx-deployment   ClusterIP   10.96.222.161   <none>        30000/TCP   3m15s

NAME                                    READY   STATUS    RESTARTS   AGE
pod/nginx-deployment-77bcbfbfdc-bv5bz   1/1     Running   0          16s
pod/nginx-deployment-77bcbfbfdc-fq8wr   1/1     Running   0          16s
pod/nginx-deployment-77bcbfbfdc-xrg45   1/1     Running   0          3m39s

[Échec du transfert d'image du lien externe, le site source peut avoir un mécanisme anti-leech, il est recommandé d'enregistrer l'image et de la télécharger directement (img-OLP7n7Y1-1649159008795) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \k8s\k8s- déploiement de kubeadmin\18.bmp)]


yum install ipvsadm -y
ipvsadm -Ln

curl 10.96.222.161:30000


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

kubectl get svc
NAME                       TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)           AGE
service/kubernetes         ClusterIP   10.96.0.1       <none>        443/TCP           29m
service/nginx-deployment   NodePort    10.96.222.161   <none>        30000:32340/TCP   22m

浏览器访问:
192.168.80.10:32340
192.168.80.11:32340
192.168.80.12:32340
########### 内核参数优化方案 ##########
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

Je suppose que tu aimes

Origine blog.csdn.net/weixin_54059979/article/details/123975541
conseillé
Classement