1. Duas maneiras de implantar k8s
Atualmente, existem duas maneiras principais de implantar clusters Kubernetes na produção:
kubeadm
Kubeadm é uma ferramenta de implantação K8s que fornece kubeadm init e kubeadm join para implantação rápida de clusters Kubernetes.
pacote binário
Baixe o pacote binário da distribuição do github e implante manualmente cada componente para formar um cluster Kubernetes.
Este experimento usa o kubeadm para criar um cluster.
2. Ambiente de implantação
NOME |
IP |
OS-IMAGE |
VERSÃO |
VERSÃO DOCKER |
VERSÃO CALICO |
mestre |
192.168.0.220 |
el7.x86_64 |
v1.23.0 |
23.0.1 |
v3.9.0 |
nó01 |
192.168.0.6 |
el7.x86_64 |
v1.23.0 |
23.0.1 |
v3.9.0 |
3. Configuração inicial
modificar nome do host
Modifique o arquivo hosts
desligue o firewall
fechar selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时
Feche a partição swap e reinicie
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
Sincronize o tempo de cada nó
#安装ntpdate
yum -y install ntpdate
运行命令:crontab -l
添加:0 */1 * * * ntpdate time1.aliyun.com
Adicionar filtragem de ponte
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF
Carregar o módulo br_netfilter
modprobe br_netfilter
#查看
lsmod | grep br_netfilter
Carregar arquivo de configuração do filtro de ponte
sysctl -p /etc/sysctl.d/k8s.conf
abrir ipvs
#安装ipset及ipvsadm
yum -y install ipset ipvsadm
#创建sysconfig/modules文件夹
mkdir -p /etc/sysconfig/modules/
#操作如下命令
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
4. Implante o cluster Kubernetes
Instalar Docker, kubeadm, kubelet [todos os nós]
Instalar janela de encaixe:
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce
systemctl enable docker && systemctl start docke
Configure o acelerador de download do espelho:
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
systemctl restart docker
docker info #查看docker信息,进行确认
Adicionar fonte de software Alibaba Cloud:
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
Instale kubeadm, kubelet, kubectl:
yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
systemctl enable kubelet
Defina apenas o kubelet para iniciar (a inicialização subsequente do cluster iniciará o kubelet)
#查看kubelet状态
systemctl status kubelet
#设置kubelet开机启动
systemctl enable kubelet
Veja as imagens exigidas pelo cluster k8s e baixe-as com antecedência
kubeadm config images list
Implantar k8s-master [execução mestre]
kubeadm deploy
kubeadm init \
--apiserver-advertise-address=192.168.0.220 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all
Observação: --apiserver-advertise-address Endereço de anúncio de cluster
--image-repository Como o endereço de imagem pull padrão k8s.gcr.io não pode ser acessado na China, especifique o endereço do repositório de imagens Alibaba Cloud aqui
--kubernetes-version versão K8s, consistente com a instalada acima
--service-cidr rede virtual interna do cluster, entrada de acesso unificado do pod
--pod-network-cidr Rede de pods, consistente com o componente de rede CNI yaml implantado abaixo
Copie a saída do comando kubeadm join acima
kubeadm join 192.168.0.220:6443 --token v4cfxg.nopu749nz57alzwo \
--discovery-token-ca-cert-hash sha256:56ab22922d19aa6e77b7b046fa82ad1b8a3ed90323ab9e5eacae1008b2a9deb4
Copie o arquivo de autenticação k8s
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
Veja os nós de trabalho:
kubectl get nodes
Observação: Como o plug-in de rede não foi implantado, ele ainda não está pronto. NotReady, continue a operar.
Instale o plug-in de rede Calico [execução principal]
Baixe o arquivo calico.yaml do plugin de rede e execute:
wget https://docs.projectcalico.org/v3.23/manifests/calico.yaml
vim calico.yaml
- name: CALICO_IPV4POOL_CIDR
value: "10.244.0.0/16" #与前面kubeadm init的 --pod-network-cidr指定的一样
- name: IP_AUTODETECTION_METHOD
value: "interface=eth0" #IP 220那个网卡
kubectl apply -f calico.yaml
Observação:
问题:alico/node is not ready: BIRD is not ready: BGP not Established with 192.168.0.220
O motivo é que o nó mestre tem mais placas de rede e o calico escolhe a placa de rede errada.
Modifique calico.yaml e especifique o nome correto da placa de rede.
O endereço ifconfig 220 está localizado em eth0
aumento no aumento do env:
– nome: IP_AUTODETECTION_METHOD
valor: "interface=eth0"
kubectl get pods -n kube-system
Depois que os Calico Pods estiverem em execução, os nós estarão prontos
kubectl describe pods calico-node-dghzw -n kube-system
Lembre-se: Adicione no arquivo daemon.json do docker: "exec-opts": ["native.cgroupdriver=systemd"]
Verifique se a instalação do nó mestre está normal
#查看每个容器运行状态(仅且显示STATUS:Running 、 READY:1/1 状态,表示集群安装成功)
kubectl get pod -n kube-system
#通过如下命令定位问题(一般情况为镜像拉取失败)
kubectl describe pod 容器名 -n kube-system 或 kubectl logs 容器名 -n kube-system
Configurar o nó nó de k8s [operação nó nó]
Para adicionar um novo nó ao cluster, execute a saída do comando kubeadm join em kubeadm init
kubeadm join 192.168.0.220:6443 --token v4cfxg.nopu749nz57alzwo \
--discovery-token-ca-cert-hash sha256:56ab22922d19aa6e77b7b046fa82ad1b8a3ed90323ab9e5eacae1008b2a9deb4
O token padrão é válido por 24 horas e, quando expira, o token não está mais disponível. Neste momento, o token precisa ser recriado, o que pode ser gerado diretamente usando o comando:
criação de token kubeadm --print-join-command
5. Implantar painel
Dashboard é uma IU oficial que pode ser usada para gerenciamento básico dos recursos do K8s.
Endereço de download do YAML:
https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
Por padrão, o Dashboard só pode ser acessado dentro do cluster. Modifique o tipo Service to NodePort e exponha-o para fora:
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
ports:
- port: 443
targetPort: 8443
nodePort: 30001 --增加
selector:
k8s-app: kubernetes-dashboard
type: NodePort --增加
implemento:
kubectl apply -f recommended.yaml
kubectl get pods -n kubernetes-dashboard
Endereço de acesso: https://NodeIP:30001
Um token é necessário, para o qual uma conta de serviço precisa ser criada e vinculada à função de cluster padrão do administrador do cluster:
# 创建用户
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}')
Use o token de saída para fazer login no Dashboard.
6. Verifique se todo o cluster foi instalado com êxito [mestre]
#查看集群节点以及节点状态是否就绪,Ready为就绪
kubectl get node
#查看每个容器运行状态(仅且显示STATUS:Running 、 READY:1/1 状态,表示容器正常运行,当所有容器正常运行时节点转为就绪状态)
kubectl get pod -n kube-system -owide
#通过如下命令定位问题(一般情况为镜像拉取失败)
kubectl describe pod 容器名 -n kube-system
或 kubectl logs 容器名 -n kube-system