虚拟机安装Kubernetes

学习资料

基础

云原生实战

实践

虚拟机

k8s至少需要安装三台虚拟机

下载

CentOS 官方下载地址:https://www.centos.org/download/

Centos国内下载源
http://man.linuxde.net/download/CentOS
http://mirrors.btte.net/centos/7/isos/x86_64/
http://mirrors.cn99.com/centos/7/isos/x86_64/
http://mirrors.sohu.com/centos/7/isos/x86_64/
http://mirrors.aliyun.com/centos/7/isos/x86_64/
http://centos.ustc.edu.cn/centos/7/isos/x86_64/
http://mirrors.neusoft.edu.cn/centos/7/isos/x86_64/
http://mirror.lzu.edu.cn/centos/7/isos/x86_64/
http://mirrors.163.com/centos/7/isos/x86_64/
http://ftp.sjtu.edu.cn/centos/7/isos/x86_64/

这里选择http://ftp.sjtu.edu.cn/centos/7/isos/x86_64/,进入页面选择dvd.ios下载即可

image-20221203171250339

安装

下载完成后在VMware进行安装,vmware下载链接

安装流程很简单,虚拟机配置按自己情况设置,往下点就ok,这里需要注意一点,在安装引导程序中的软件设置中可以安装基本的软件,方便后面的使用

image-20221203172332758image-20221203172431361

重复安装即可获得3台虚拟机

配置

虚拟机网络配置

1.刚安装好的CentOS是没有网络的,运行ip addr命令或者ping命令,结果没有显示局域网的IP地址

2.我们去修改网卡配置文件,把网络连接打开 cd /etc/sysconfig/network-scripts/然后 vim ifcfg-ens33,把ONBOOT 改为yes,并保存退出

image-20221203174043353

3.应用设置service network restart

安装docker

CentOS安装docker参考文档

Kubernetes安装

1.基本配置

#各个机器设置自己的域名
hostnamectl set-hostname xxxx


# 将 SELinux 设置为 disable 模式(相当于将其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=disable/' /etc/selinux/config

#关闭防火墙
systemctl disable firewalld #永久关闭,即设置开机的时候不自动启动,非必须按需求

#关闭swap
swapoff -a  
sed -ri 's/.*swap.*/#&/' /etc/fstab

#允许 iptables 检查桥接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

2.软件配置,安装kubelet、kubeadm、kubectl

cat <<EOF | sudo tee /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
exclude=kubelet kubeadm kubectl
EOF


sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes

sudo systemctl enable --now kubelet

3.使用kubeadm引导集群,下载各个机器需要的镜像

sudo tee ./images.sh <<-'EOF'
#!/bin/bash
images=(
kube-apiserver:v1.20.9
kube-proxy:v1.20.9
kube-controller-manager:v1.20.9
kube-scheduler:v1.20.9
coredns:1.7.0
etcd:3.4.13-0
pause:3.2
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
done
EOF
   
chmod +x ./images.sh && ./images.sh

4.初始化主节点

#所有机器添加master域名映射,以下需要修改为自己的 ip地址为主节点地址
echo "172.31.0.4  cluster-endpoint" >> /etc/hosts


#主节点初始化,主节点单独操作
kubeadm init \
--apiserver-advertise-address=172.31.0.4 \ (主节点ip地址)
--control-plane-endpoint=cluster-endpoint \
--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \
--kubernetes-version v1.20.9 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=192.168.0.0/16

#所有网络范围不重叠

5.初始完主节点后,会提示后面操作流程,下面是提示内容

image-20221205103010664

6.复制配置文件操作完后,需要配置网络插件

curl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O

kubectl apply -f calico.yaml

在执行calico.yaml时碰到了三种报错

unable to connect to the server:dial tcp 192.168…:5443:connect:no route to host

原因:虚拟机的ip地址变了,跟前面初始化时设置的ip地址不一致

解决方法:将虚拟机的地址改成原来的地址,并且固定ip,固定ip修改配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33,文件名不同系统可能会不一样。

The connection to the server cluster-endpoint:6443 was refused - did you specify the right host or port?

原因:虚拟机的ip地址变了,导致之前配置的域名和ip的绑定失效

解决方法:重新绑定域名即可

unable to recognize “calico.yaml”: no matches for kind “PodDisruptionBudget” in version “policy/v1”

原因:calico 与 k8s版本不匹配

解决方法:查看K8S版本,查看版本匹配关系,下载版本匹配的calico

7.加入工作节点

kubeadm join cluster-endpoint:6443 --token e8nel8.qtqdlig16b7elct5 \
    --discovery-token-ca-cert-hash sha256:acd8bf76e088a1d4be1499363fc0787cdb5a695e206d1091901d3c532c60f9d7

重新生成令牌:kubeadm token create --print-join-command

8.部署dashboard,安装可视化界面

#从github上拉取配置文件,
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
#设置访问端口 type: ClusterIP 改为 type: NodePort
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
#查看访问端口
kubectl get svc -A |grep kubernetes-dashboard
## 找到端口,访问不了请检查防火墙、安全组以及setenforce

假如虚拟机访问不了页面,可以尝试在recommended.yaml配置文件加上nodeName: hostname

image.png

image.png

9.配置dashboard账号,创建yaml文件内容如下所示,发送kubectl apply -f dash-usr.yaml应用该配置文件

最后发送:

kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"

即可获取到访问令牌

#创建访问账号,准备一个yaml文件; vi dash.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard
#访问令牌
eyJhbGciOiJSUzI1NiIsImtpZCI6InJFZTQ3YWRiZDFSVThvVzdQZGExNUViNnZZUG54MDllZEVFaHlzNVFqbXcifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLW1kNDV3Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI3OTgxYWIxYS0wZjdkLTQxNDYtYWY0Ny0wYTkyM2Q2MTJiNGIiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.JjGvWtCZyvdQw32pSZ01n2BOZelEZ68eHtov7zUMlBZ26PH48Bf3XE_Xn-1HsR9Rksytu5C1jw1qWR5QlH_njlgnLDdcudjWrnGAJN91XMvVUmnehOPzw7aMvsIa_ZX46DLqumDgoDjDmV5uN3MFQ67uLaw86QajKfOGQruyKVEis04vjxnco-yOIM108UshOD-Msu3Z_-sIss3aZkvvP97YDRhSGAF3UVNRieBVRkcrTWCCMlfOnIKzaQF-imHIWz3Qy29KL8o2s7vwTuiAnVvV5W_Nmyc4iJ7N8UMheKLP-LRpAYIawep98Q0ib1ixfT8iTCGfSLiSe-VUs5QlQg