Environnement
Deux ou plusieurs serveurs Cloud Tencent(J'en ai construit deux.),Tous. CentOs 7.6,
master Noeud:Le serveur est 4C8G,Réseau public IP:124.222.61.xxx
node1Noeud:Le serveur est 4C4G,Réseau public IP:101.43.182.xxx
Modifier hosts Information:
In master Noeuds et node Node hosts Ajouter des informations de noeud au fichier
$ vim /etc/hosts
124.222.61.xxx master
101.43.182.xxx node1
Ici. master Et node1 Tous hostname,Essayez de ne pas utiliser par défaut hostname,ModifierhostnameL'ordre de
hostnamectl set-hostname master
Désactiver le pare - feu:
$ systemctl stop firewalld
$ systemctl disable firewalld
Désactiver SELINUX:
$ vim /etc/selinux/config
SELINUX=1
$ setenforce 0
$ vim /etc/selinux/config
SELINUX=disabled
Chargement br_netfilter Module:
$ modprobe br_netfilter
Création/etc/sysctl.d/k8s.confDocumentation:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
Exécuter la commande pour que la modification prenne effet:
$ sysctl -p /etc/sysctl.d/k8s.conf
Installation ipvs:
$ cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
$ chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
Installer sur chaque noeud ipset:
$ yum install ipset
Installer des outils de gestion ipvsadm:
$ yum install ipvsadm
Synchronisation du temps du serveur:
$ yum install chrony -y
$ systemctl enable chronyd
$ systemctl start chronyd
Fermer swap Partition:
$ swapoff -a
$ vim /etc/sysctl.d/k8s.conf
(Ajouter une ligne)vm.swappiness=0
$ sysctl -p /etc/sysctl.d/k8s.conf
Installation Docker:
$ yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
$ yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo (Alibaba Cloud Mirror)
$ yum install docker-ce-18.09.9
Configuration Docker Accélérateur miroir(Alicloud):
$ mkdir -p /etc/docker
$ vim /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors" : [
"https://uvtcantv.mirror.aliyuncs.com"
]
}
Démarrage Docker:
$ systemctl start docker
$ systemctl enable docker
Installation Kubeadm:
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
Puis installez kubeadm、kubelet、kubectl:
$ yum install -y kubelet-1.16.2 kubeadm-1.16.2 kubectl-1.16.2 --disableexcludes=kubernetes
Mise en marche automatique :
$ systemctl enable --now kubelet
Toutes les opérations ci - dessus doivent être configurées sur tous les noeuds
Initialisation du cluster
In master Configuration du noeud kubeadm Fichier d 'initialisation:
$ kubeadm config print init-defaults > kubeadm.yaml
Modifier kubeadm.yaml Documentation,Modifier imageRepository ,kube-proxy Le mode est ipvs,networking.podSubnet Set to10.244.0.0/16:
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 124.222.61.xxx # apiserver masterNoeudIP
bindPort: 6443
nodeRegistration:
criSocket: /var/run/dockershim.sock
name: master # Lire le courant par défaut masterNodehostname
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
type: CoreDNS
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers # Modifier comme source d'image alicloud
kind: ClusterConfiguration
kubernetesVersion: v1.16.2
networking:
dnsDomain: cluster.local
podSubnet: 10.244.0.0/16 # Pod Segment réseau,flannelLe plugin doit utiliser ce segment réseau
serviceSubnet: 10.96.0.0/12
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs # kube-proxy Mode
Puis initialiser avec le profil ci - dessus:
$ kubeadm init --config kubeadm.yaml
Initialisation il y a un trou ici , Après avoir exécuté le script d'initialisation ci - dessus, il se coincera dans etcd Emplacement initialisé,Parce que etcd Utiliser l'Extranet lors de la liaison des ports IP, Et l'Extranet ECS IP N'est pas une carte réseau native , Au lieu de cela, la passerelle assigne un accès externe IP, Cela fait que le processus d'initialisation continue de retry BIND , Ça fait longtemps.
[kubelet-check] Initial timeout of 40s passed.
Solutions, Démarrer un autre terminal serveur lorsqu'il est coincé , Modifier l'initialisation générée etcd.yaml
vim /etc/kubernetes/manifests/etcd.yaml
Modifier comme suit: :

Attendez trois ou quatre minutes. .
Après une initialisation réussie, Imprime une commande sur le terminal , Cette commande est la commande que le noeud doit exécuter pour rejoindre le cluster, comme le montre la figure suivante: :

Copie kubeconfig Documentation:
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
Ajouter un noeud
Oui. master Sur le noeud $HOME/.kube/config Copie du fichier à node Noeud$HOME/.kube/configDans le fichier correspondant
Puis exécutez ce qui précède master Commandes générées par l'initialisation des noeuds , Peut être exécuté si vous oubliez kubeadm token create --print-join-commandRe - acquisition.
kubeadm join 124.222.61.161:6443 --token 1l2un1.or6f04f1rewyf0xq --discovery-token-ca-cert-hash sha256:1534171b93c693e6c0d7b2ed6c11bb4e2604be6d2af69a5f464ce74950ed4d9d
Exécution réussiekubectl get nodesLes ordres:
$ kubectl get nodes
Vous pouvez voir après l'exécution status - Oui. NotReady Statut, Parce que nous n'avons pas installé le plug - in réseau
Installation flannel Plug - in réseau:
$ wget https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml
$ vi kube-flannel.yml
......
containers:
- name: kube-flannel
image: quay.io/coreos/flannel:v0.11.0-amd64
command:
- /opt/bin/flanneld
args:
- --ip-masq
- --kube-subnet-mgr
- --iface=eth0 # S'il s'agit d'une carte multi - réseau,Spécifiez le nom de la carte Intranet
......
$ kubectl apply -f kube-flannel.yml
Attendre un certain temps pour voir Pod État de fonctionnement:
$ kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-58cc8c89f4-6nn74 1/1 Running 0 18h
coredns-58cc8c89f4-v96jb 1/1 Running 0 18h
etcd-ydzs-master 1/1 Running 0 18h
kube-apiserver-ydzs-master 1/1 Running 2 18h
kube-controller-manager-ydzs-master 1/1 Running 0 18h
kube-flannel-ds-amd64-674zs 1/1 Running 0 18h
kube-flannel-ds-amd64-zbv7l 1/1 Running 0 18h
kube-proxy-b7c9c 1/1 Running 0 18h
kube-proxy-bvsrr 1/1 Running 0 18h
kube-scheduler-ydzs-master 1/1 Running 0 18h
Voir node Noeud, C'est normal aussi :
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 18h v1.16.2
node1 Ready <none> 18h v1.16.2
Configuration Dashboard
$ wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta5/aio/deploy/recommended.yaml
$ vi recommended.yaml
# ModifierServicePourNodePortType
......
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
ports:
- port: 443
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
type: NodePort # Plustype=NodePortDevenirNodePortType de service
......
$ kubectl apply -f recommended.yaml
Dashboard Sera installé par défaut dans kubernetes-dashboard Sous cet espace de noms:
$ kubectl get pods -n kubernetes-dashboard -l k8s-app=kubernetes-dashboard
NAME READY STATUS RESTARTS AGE
kubernetes-dashboard-6b86b44f87-xsqft 1/1 Running 0 16h
$ kubectl get svc -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dashboard-metrics-scraper ClusterIP 10.100.126.111 <none> 8000/TCP 17h
kubernetes-dashboard NodePort 10.108.217.144 <none> 443:31317/TCP 17h
Et nous avons passéhttps://124.222.61.161:31317Accès à, L'accès échouera , Parce que le certificat est expiré :
#Nouveau répertoire:
mkdir key && cd key
#Générer un certificat
openssl genrsa -out dashboard.key 2048
# J'ai écrit le mien ici. node1Noeud,Parce que j'ai réussinodeportVisites;Si ça passeapiserverAccès à, Peut être écrit comme le sien masterNoeudip
openssl req -new -out dashboard.csr -key dashboard.key -subj '/CN=124.222.61.161'
openssl x509 -req -in dashboard.csr -signkey dashboard.key -out dashboard.crt
# Supprimer le certificat existant secret
kubectl delete secret kubernetes-dashboard-certs -n kubernetes-dashboard
# Créer un nouveau certificat secret
kubectl create secret generic kubernetes-dashboard-certs --from-file=dashboard.key --from-file=dashboard.crt -n kubernetes-dashboard
#Voirpod
kubectl get pod -n kubernetes-dashboard
#Redémarrerpod
kubectl delete pod kubernetes-dashboard-7b5bf5d559-gn4ls -n kubernetes-dashboard
Continuer l'accès après avoir effectué une connexion non sécurisée , Continuez la visite. .
Ici, nous utilisons Firefox ,Google Le navigateur n'est pas accessible
Créer un login utilisateur Dashboard:
# Création admin.yaml Documentation
$ vim admin.yaml
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: admin
annotations:
rbac.authorization.kubernetes.io/autoupdate: "true"
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
name: admin
namespace: kubernetes-dashboard
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin
namespace: kubernetes-dashboard
# Création directe
$ kubectl apply -f admin.yaml
$ kubectl get secret -n kubernetes-dashboard|grep admin-token
admin-token-jv2dq kubernetes.io/service-account-token 3 16h
kubectl get secret admin-token-jv2dq -o jsonpath={.data.token} -n kubernetes-dashboard |base64 -d
# Il en résultera une longue chaînebase64Chaîne après
Ensuite, utilisez le dessus. base64 La chaîne de token Connexion Dashboard C'est tout.:










