kubernetes安装,centos7安装kubernetes,linux安装k8s
一、环境准备
系统: 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