CentOS安装k8s

简介: CentOS安装k8s

1.系统配置

  • 硬件配置基本要求
资源 大小
硬盘 >= 20G
cpu >= 2核
内存 >= 2G
  • 本教程配置
主机名 IP 配置
master 192.168.10.155 3核+2G+20G
worker1 192.168.10.234 3核+2G+20G
worker2 192.168.10.147 3核+2G+20G

2.安装必要软件

所有机器都要执行

yum 更新

sudo yum update -y
  • bash-completion: tab命令补全
  • wget:下载工具
  • vim-enhanced:vim编辑器
  • net-tools:网络工具
  • gcc: 编译器
sudo yum install -y bash-completion wget vim-enhanced net-tools gcc

3.设置主机名

  • 查看主机名
hostname
  • 设置主机名

以下三条命令分别在三个节点执行

#master节点
hostnamectl set-hostname k8s-master
#worker1节点
hostnamectl set-hostname k8s-worker1
#woker2节点
hostnamectl set-hostname k8s-worker2

4.配置hosts文件

将节点加入到 hosts 文件中

编辑/etc/hosts文件

vi /etc/hosts

添加以下内容

192.168.10.155 k8s-master
192.168.10.234 k8s-worker1
192.168.10.147 k8s-worker2

5.设置时间同步

sudo yum -y install ntpdate
sudo ntpdate ntp1.aliyun.com
sudo systemctl status ntpdate
sudo systemctl start ntpdate
sudo systemctl status ntpdate
sudo systemctl enable ntpdate

6.关闭防火墙或者开通指定端口

这里使用关闭防火墙

sudo systemctl stop firewalld.service 
sudo systemctl disable firewalld.service

7.关闭 swap 交换空间

#查看
free -h
#临时关闭swap
sudo swapoff -a
#久关闭swap分区
sudo sed -i 's/.*swap.*/#&/' /etc/fstab

8.关闭selinux

#查看
getenforce
cat /etc/selinux/config
#临时关闭
sudo setenforce 0
#永久关闭
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

9. 安装 docker, Containerd

  • 安装 docker, Containerd
# 删除 docker(如果有的话)
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
# 安装必备工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 加入 docker 源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 
# 安装 docker
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 安装 containerd
sudo yum install -y containerd
  • 配置
# 停止 containerd
sudo systemctl stop containerd.service
# 生成并修改配置文件
sudo cp /etc/containerd/config.toml /etc/containerd/config.toml.bak
sudo containerd config default > $HOME/config.toml
sudo cp $HOME/config.toml /etc/containerd/config.toml
sudo sed -i "s#registry.k8s.io/pause#registry.cn-hangzhou.aliyuncs.com/google_containers/pause#g" /etc/containerd/config.toml
sudo sed -i "s#SystemdCgroup = false#SystemdCgroup = true#g" /etc/containerd/config.toml
# 将 containerd 加入开机自启
sudo systemctl enable --now containerd.service
# 启动 docker
sudo systemctl start docker.service
# 将 docker 加入开机自启
sudo systemctl enable docker.service
sudo systemctl enable docker.socket
sudo systemctl list-unit-files | grep docker
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo docker info
sudo systemctl status docker.service
sudo systemctl status containerd.service

10.添加阿里云 k8s 镜像仓库

添加/etc/yum.repos.d/kubernetes.repo文件;文件内容如下

[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
# 是否开启本仓库
enabled=1
# 是否检查 gpg 签名文件
gpgcheck=0
# 是否检查 gpg 签名文件
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

11.设置 docker 镜像加速

sudo mkdir -p /etc/docker
vi /etc/docker/daemon.json

/etc/docker/daemon.json文件添加如下内容

{
"registry-mirrors":  [
"https://dockerproxy.com",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://ccr.ccs.tencentyun.com"
],
"exec-opts": ["native.cgroupdriver=systemd"]
}

12. 将桥接的IPv4流量传递到iptables的链

cat >/etc/modules-load.d/k8s.conf <<EOF
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
cat >/etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
EOF
sysctl --system
# 通过运行以下指令确认br_netfilter和overlay模块被加载
lsmod | egrep 'overlay|br_netfilter'
# 通过运行以下指令确认net.bridge.bridge-nf-call-iptables、net.bridge.bridge-nf-call-ip6tables系统变量在你的sysctl配置中被设置为1
sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward

13.安装k8s

# 安装 1.27.1 版本
sudo yum install -y kubelet-1.27.1-0 kubeadm-1.27.1-0 kubectl-1.27.1-0 --disableexcludes=kubernetes --nogpgcheck
systemctl daemon-reload
sudo systemctl restart kubelet
sudo systemctl enable kubelet

安装最新版本(生产环境不建议)

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

14.k8s配置

  • master 初始化(仅在master节点主机上执行)
kubeadm init --image-repository=registry.aliyuncs.com/google_containers --apiserver-advertise-address=192.168.42.150 --kubernetes-version=v1.27.1

--image-repository: 镜像加速地址,一般不动

--apiserver-advertise-address: master节点IP地址

--kubernetes-version: kubernetes版本,自己选择的什么版本就改成什么版本

初始化失败可以使用kubeadm reset重置;失败原因多半是因为网络问题,可以换个网络试试

  • 初始化成功后执行(仅在master节点主机上执行)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 将 node 加入集群(仅在node节点主句执行)

kubeadm init命令执行成功后,会打印以下内容 (不要直接复制,每个人不一样)

kubeadm join 192.168.10.155:6443 --token pn5997.vkugw8cmdpc407y2 \
  --discovery-token-ca-cert-hash sha256:b625d6be2a3ccb56f3277e835b343d33a0b2e93e56e238a48daf830d3b7219f2

如果忘记或者过期可以使用以下命令重新生成

kubeadm token create --print-join-command
  • 查看集群状态(master 节点执行)
kubectl get nodes

输出

NAME          STATUS     ROLES           AGE     VERSION
k8s-master    NotReady   control-plane   8m42s   v1.27.1
k8s-worker1   NotReady   <none>          82s     v1.27.1
k8s-worker2   NotReady   <none>          84s     v1.27.1

可以看到所有节点都是 NotReady ,是因为还没有配置网络

  • 配置网络(仅在master节点执行)

k8s版本要与Calico版本对应上,具体查看

https://docs.tigera.io/calico/latest/getting-started/kubernetes/requirements

下载calico.yaml文件

wget --no-check-certificate https://projectcalico.docs.tigera.io/archive/v3.25/manifests/calico.yaml

修改calico.yaml文件

- name: CLUSTER_TYPE下方添加如下内容

- name: CLUSTER_TYPE
value: "k8s,bgp"
#下方为新增内容
- name: IP_AUTODETECTION_METHOD
value: "interface=master节点主机的网卡名称"

配置网络

kubectl apply -f calico.yaml

再次查看节点信息

kubectl get nodes

依然还是没有成功;查看 pod 状态,没有正常启动

kubectl get pods --all-namespaces -o wide | grep kube-system

使用crictl logs命令查看任何一个pod,发现有如下错误

crictl logs coredns-7bdc4cb885-28jnf

kubectl logs -n kube-system命令查看状态不是running的pod,发现有如下错误

kubectl logs -n kube-system calico-node-bfxtk
kubectl logs -n kube-system coredns-7bdc4cb885-28jnf

新建/etc/crictl.yaml文件,写入如下内容

runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false

使用kubectl delete pod -n kube-system命令删除那些状态不是running的pod。例如

kubectl delete pod -n kube-system calico-kube-controllers-6c99c8747f-kmkdl

再次查看pod的启动状态,全部都是在running状态

kubectl get pod -n kube-system

另外crictl ps也可以使用了。

crictl ps -a

使用crictl logs也可以查看日志了

crictl logs 4838afe83150e

15.其他

  • k8s命令补全
! grep -q kubectl "$HOME/.bashrc" && echo "source /usr/share/bash-completion/bash_completion" >>"$HOME/.bashrc"
! grep -q kubectl "$HOME/.bashrc" && echo "source <(kubectl completion bash)" >>"$HOME/.bashrc"
! grep -q kubeadm "$HOME/.bashrc" && echo "source <(kubeadm completion bash)" >>"$HOME/.bashrc"
! grep -q crictl "$HOME/.bashrc" && echo "source <(crictl completion bash)" >>"$HOME/.bashrc"
source "$HOME/.bashrc"
  • 常用命令
# 获取节点
kubectl get nodes -o wide
# 实时查询nodes状态
watch kubectl get nodes -o wide
# 获取pod
kubectl get pods --all-namespaces -o wide
# 查看镜像列表
kubeadm config images list
# 节点加入集群
kubeadm token create --print-join-command
# 描述node
kubectl describe node k8s-master
# 描述pod
kubectl describe pod kube-flannel-ds-hs8bq --namespace=kube-system

16.测试

以下命令在主节点执行

  • 创建一个 nginx
kubectl create deployment nginx --image=nginx
  • 查看状态
kubectl get pods -o wide

等待ContainerCreating变成Running后执行下一个步骤

  • 暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
  • 查看 pos 及服务信息
kubectl get pod,svc

  • 在浏览器中访问
http://192.168.10.155:31930/

地址根据你自己的主机变化,端口上面输出的信息中 PORT(S) 这一栏会有

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
3月前
|
存储 Ubuntu Linux
VMware-安装CentOS系统教程及安装包
虚拟机相当于是一个独立于你电脑的环境,在这个环境上面,你可以安装Linux、Windows、Ubuntu等各个类型各个版本的系统,在这个系统里面你不用担心有病读等,不用担心文件误删导致系统崩溃。 虚拟机也和正常的电脑系统是一样的,也可以开关机,不用的时候,你关机就可以了,也不会占用你的系统资源,使用起来还是比较方便 这里也有已经做好的CentOS 7系统,下载下来解压后直接用VMware打开就可以使用
751 69
|
2月前
|
存储 分布式计算 Linux
安装篇--CentOS 7 虚拟机安装
VMware 装 CentOS 7 不知道从哪下手?这篇超详细图文教程手把手教你在 VMware Workstation 中完成 CentOS 7 桌面系统的完整安装流程。从 ISO 镜像下载、虚拟机配置,到安装图形界面、设置用户密码,每一步都有截图讲解,适合零基础新手快速上手。装好之后无论你是要搭 Hadoop 集群,还是练 Linux ,这个环境都够你折腾一整天!
1020 2
|
3月前
|
Ubuntu Linux 索引
Centos 7、Debian及Ubuntu系统中安装和验证tree命令的指南。
通过上述步骤,我们可以在CentOS 7、Debian和Ubuntu系统中安装并验证 `tree`命令。在命令行界面中执行安装命令,然后通过版本检查确认安装成功。这保证了在多个平台上 `tree`命令的一致性和可用性,使得用户无论在哪种Linux发行版上都能使用此工具浏览目录结构。
355 78
|
2月前
|
安全 关系型数据库 MySQL
CentOS 7 yum 安装 MySQL教程
在CentOS 7上安装MySQL 8,其实流程很清晰。首先通过官方Yum仓库来安装服务,然后启动并设为开机自启。最重要的环节是首次安全设置:需要先从日志里找到临时密码来登录,再修改成你自己的密码,并为远程连接创建用户和授权。最后,也别忘了在服务器防火墙上放行3306端口,这样远程才能连上。
523 16
|
4月前
|
Linux 网络安全 Apache
针对在Centos/Linux安装Apache过程中出现的常见问题集锦
以上每个问题的解决方案应深入分析错误日志、系统消息和各种配置文件,以找到根本原因并加以解决。务必保持系统和Apache软件包更新到最新版本,以修复已知的bugs和安全漏洞。安装和管理Web服务器是一项需要细致关注和不断学习的任务。随着技术的发展,推荐定期查看官方文档和社区论坛,以保持知识的更新。
236 80
|
3月前
|
存储 关系型数据库 MySQL
在CentOS 8.x上安装Percona Xtrabackup工具备份MySQL数据步骤。
以上就是在CentOS8.x上通过Perconaxtabbackup工具对Mysql进行高效率、高可靠性、无锁定影响地实现在线快速全量及增加式数据库资料保存与恢复流程。通过以上流程可以有效地将Mysql相关资料按需求完成定期或不定期地保存与灾难恢复需求。
319 10
|
4月前
|
人工智能 数据挖掘 Linux
Centos安装Python3.7(亲测可用)
本指南详细介绍了在基于Linux(以CentOS系统为例,使用yum包管理器)的系统上安装Python 3.7版本的完整流程。Python是一种广泛使用的高级编程语言,在各种领域如软件开发、数据分析、人工智能和区块链开发等都有着重要的应用。
464 2
|
3月前
|
运维 网络协议 Linux
CentOS下Bind服务的安装与故障排查
通过以上的步骤,您应该能够在CentOS系统上安装并配置BIND DNS服务,并进行基本的故障排查。
347 0
|
3月前
|
存储 Ubuntu Linux
安卓手机免root安装各种Linux系统:Ubuntu, Centos,Kali等
此外还可以安装Slackware、Archstrike等系统,还可以通过github查找方法安装更多有趣的东西。 昨日小编就是通过Termux安装的Kali Linux工具包。