- 一、环境准备
- 二、首先安装docker(三台服务器都需要)
- 1. 配置docker源
- 2. docker镜像加速
- 3. 加载docker镜像
- 三、系统环境参数配置 (三台服务器都需要)
- 1. 关闭防火墙
- 2. 关闭selinux 和 关闭swap
- 3. 每台主机分别设置主机 和 每个节点添加hosts(每台主机操作命令不同)
- 4. 将桥接的IPv4流量传递到iptables的链
- 5. 时间同步
- 四、kubernetes安装
- 1. 配置kubernetes阿里镜像源(三台都需要)
- 2. 安装kubeadm、kubelet、kubectl
- 3. kubeadm init初始化(master服务器执行)
- 4. 复制配置文件并授权
- 5. 应用kube-flannel.yml 文件
- 6. 另外两个node节点连接主节点
- 7. 集成calico网络组件(master服务器执行)
- 五、kubernetes的一些命令和操作
系统: Centos7.9
注意:使用centos7建议用Centos7.9版本,只有7.9版本维护中,其他版本已经停止维护了。
例如如果使用的已经是7.4,则可以使用命令升级系统内核,当然也可以不升级。:
#检查系统更新 和 升级系统内核 apt update && apt upgrade
升级完成后可以通过命令:
#查看系统内核,如果是 7.9,则代表升级成功。 [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)
下面试三台Centos7.9主机:
192.168.23.136 master 主机器
192.168.23.137 node1 从机2
192.168.23.138 node2 从机3
yum install yum-utils -y yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install -y docker-ce-19.03.9 docker-ce-cli-19.03.9 containerd.io2. docker镜像加速
#创建目录
mkdir -p /etc/docker
#添加镜像
cat >> /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://xuv622op.mirror.aliyuncs.com"]
}
EOF
3. 加载docker镜像
systemctl daemon-reload #启动docker并且设置开机启动 systemctl enable docker && systemctl start docker三、系统环境参数配置 (三台服务器都需要) 1. 关闭防火墙
systemctl stop firewalld systemctl disable firewalld2. 关闭selinux 和 关闭swap
sed -i 's/enforcing/disabled/' /etc/selinux/config setenforce 0 #关闭swap swapoff -a3. 每台主机分别设置主机 和 每个节点添加hosts(每台主机操作命令不同)
每台主机各自命令对号入座
hostnamectl set-hostname master hostnamectl set-hostname node1 hostnamectl set-hostname node2
每个节点都执行命令
cat >> /etc/hosts << EOF 192.168.23.136 master 192.168.23.137 node1 192.168.23.138 node2 EOF4. 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF
查看上条系统参数配置是否生效:
sysctl --system5. 时间同步
yum install ntpdate -y #使用国内时区 cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #同步时区服务器 ntpdate ntp1.aliyun.com #阿里时区四、kubernetes安装 1. 配置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 EOF2. 安装kubeadm、kubelet、kubectl
所有节点安装kubeadmin、kubelet,仅在master节点上安装kubectl
yum install -y kubelet-1.19.0 kubeadm-1.19.0 kubectl-1.19.0 systemctl enable kubelet && systemctl start kubelet3. kubeadm init初始化(master服务器执行)
kubeadm参数详解参考:https://www.csdn.net/tags/MtjacgxsMzkzOTktYmxvZwO0O0OO0O0O.html#5_kubeadm_init__77
kubeadm init --apiserver-advertise-address=192.168.23.136 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.19.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=all4. 复制配置文件并授权
按照初始完成信息显示,执行命令:
mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config5. 应用kube-flannel.yml 文件
这个网址文件国内无法访问,需要翻墙。
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
假如无法访问这个地址,可以保存至本地再应用,当前文件内容可以参考,找到kube-flannel.yml复制拷贝下来即可:
https://blog.csdn.net/wuyundong123/article/details/117064624
#新增文件 vi /opt/kube-flannel.yml #按i键,进入输入模式 i #将复制的kube-flannel.yml内容粘贴后直接:wq保存 :wq
然后执行:
[root@localhost ~]# kubectl apply -f /opt/kube-flannel.yml podsecuritypolicy.policy/psp.flannel.unprivileged created clusterrole.rbac.authorization.k8s.io/flannel created clusterrolebinding.rbac.authorization.k8s.io/flannel created serviceaccount/flannel created configmap/kube-flannel-cfg created daemonset.apps/kube-flannel-ds created6. 另外两个node节点连接主节点
找到master kubeadm init后,展示的命令:
node1和node2服务器执行
kubeadm join 192.168.23.136:6443 --token odhj6a.8zkww0lcd4wd049o
--discovery-token-ca-cert-hash sha256:c91275ae6ddb934748760e66a7b9c3f659104d7e46c730c2768074709a06a8f6
默认token有效期为24小时,当过期之后,该token就不可用了,需要重新创建token
kubeadm token create --print-join-command7. 集成calico网络组件(master服务器执行)
可以参考:
https://projectcalico.docs.tigera.io/getting-started/kubernetes/quickstart
安装 Tigera Calico 运算符和自定义资源定义。
(如果报错net/http: TLS handshake timeout,则需要讲服务器或虚拟机内存加大些,内存小会报这个错)
kubectl create -f https://projectcalico.docs.tigera.io/manifests/tigera-operator.yaml
通过创建必要的自定义资源来安装 Calico
(如果报错net/http: TLS handshake timeout,则需要讲服务器或虚拟机内存加大些,内存小会报这个错)
kubectl create -f https://projectcalico.docs.tigera.io/manifests/custom-resources.yaml
删除 master 上的 taint,以便您可以在其上安排 pod。
[root@localhost ~]# kubectl taint nodes --all node-role.kubernetes.io/master- node/master untainted taint "node-role.kubernetes.io/master" not found taint "node-role.kubernetes.io/master" not found
出现 node/master untainted 就代表ok了。
执行命令,查看状态:
[root@localhost ~]# kubectl get cs
NAME STATUS MESSAGE ERROR
scheduler Unhealthy Get "http://127.0.0.1:10251/healthz": dial tcp 127.0.0.1:10251: connect: connection refused
controller-manager Unhealthy Get "http://127.0.0.1:10252/healthz": dial tcp 127.0.0.1:10252: connect: connection refused
etcd-0 Healthy {"health":"true"}
查看状态 发现scheduler和controller-manager非正常状态
出现这种情况,是/etc/kubernetes/manifests/下的kube-controller-manager.yaml和kube-scheduler.yaml设置的默认端口是0导致的,解决方式是注释掉对应的port即可,操作如下:
cd /etc/kubernetes/manifests vi kube-controller-manager.yaml
注释 --port=0
vi kube-scheduler.yaml
注释 --port=0
然后master执行命令:
#重启kubelet
systemctl restart kubelet
#再次检查状态
[root@localhost manifests]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health":"true"}
使用命令 kubectl get nodes 发现 节点状态为 NotReady
[root@localhost manifests]# kubectl get nodes NAME STATUS ROLES AGE VERSION master NotReady master 10m v1.19.0 node1 NotReady3m45s v1.19.0 node2 NotReady 3m41s v1.19.0
如下解决办法:
#下载文件 wget https://docs.projectcalico.org/manifests/calico.yaml --no-check-certificate vim calico.yaml
修改前:
修改后:
修改里面定义Pod网络(CALICO_IPV4POOL_CIDR),与前面kubeadm init指定的一样。
然后执行命令:
kubectl apply -f calico.yaml
然后需要等上几分钟,等待服务器完成配置和启动,再次查询nodes状态,则都Ready了!
[root@localhost tmp]# kubectl get nodes NAME STATUS ROLES AGE VERSION master Ready master 23m v1.19.0 node1 Ready17m v1.19.0 node2 Ready 17m v1.19.0
上面步骤顺利完成kubernetes安装。
五、kubernetes的一些命令和操作一些常用的命令:
1. 查看pods分布的节点
kubectl get pods -o wide
2. 查看kubelet状态
kubectl get cs
3. 查询deployment
kubectl get deploy
4. 删除deployment
kubectl delete deploy xxx
5. 查询所有services/svc
kubectl get services/svc
6. 查询所有的pods
kubectl get nodes
7. 删除service
kubectl delete svc xxx
8. 查询pod的log打印
kubectl logs -f xxx
出现错误排查解决思路:
1. 查询deploy详细信息或者报错信息
kubectl describe deploy xxx
2. 查询pod详细信息或者报错信息
kubectl describe pod xxx
3. 查询svc详细信息或者报错信息
kubectl describe svc xxx
4. 查看各个节点 docker运行状态
systemctl status docker
5. 检查kubectl运行状态
systemctl status kubelet -l
6. 检查防火墙状态
systemctl status firewalld
7. 查看日志
journalctl -xeu kubelet
8. 查询详细信息
kubectl describe pod/svc/deploy xxx



