kubernetes安装,centos7安装kubernetes,linux安装k8s,kubenetes问题排查

2 篇文章 0 订阅
1 篇文章 0 订阅

一、环境准备

系统: Centos7.9
注意:使用centos7建议用Centos7.9版本,只有7.9版本维护中,其他版本已经停止维护了。
例如如果使用的已经是7.4,则可以使用命令升级系统内核,当然也可以不升级。:

#检查系统更新 和 升级系统内核
yum clean all
yum update

升级完成后可以通过命令:

#查看系统内核,如果是 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

二、首先安装docker(三台服务器都需要)

1. 配置docker源

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.io

2. 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 firewalld

2. 关闭selinux 和 关闭swap

sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
#关闭swap
swapoff -a

3. 每台主机分别设置主机 和 每个节点添加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
EOF

4. 将桥接的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 --system

5. 时间同步

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
EOF

2. 安装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  kubelet

3. 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=all

4. 复制配置文件并授权

按照初始完成信息显示,执行命令:

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

6. 另外两个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-command

7. 集成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    NotReady   <none>   3m45s   v1.19.0
node2    NotReady   <none>   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    Ready    <none>   17m   v1.19.0
node2    Ready    <none>   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    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangyue23com

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值