CentOS安装k8s

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 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) 这一栏会有

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
7天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。
|
8天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。
|
1月前
|
Linux 网络安全 数据安全/隐私保护
Linux系统之Centos7安装cockpit图形管理界面
【10月更文挑战第12天】Linux系统之Centos7安装cockpit图形管理界面
69 1
Linux系统之Centos7安装cockpit图形管理界面
|
15天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。通过具体案例,读者可以了解如何准备环境、下载源码、编译安装、配置服务及登录 MySQL。编译源码安装虽然复杂,但提供了更高的定制性和灵活性,适用于需要高度定制的场景。
49 3
|
16天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。
本文介绍了在 CentOS 7 中通过编译源码安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。内容涵盖准备工作、下载源码、编译安装、配置服务、登录设置及实践心得,帮助读者根据需求选择最适合的安装方法。
31 2
|
1月前
|
NoSQL 数据可视化 Linux
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
本文介绍了Redis的两个可视化管理工具:付费的Redis Desktop Manager和免费的Another Redis DeskTop Manager,包括它们的下载、安装和使用方法,以及在使用Another Redis DeskTop Manager连接Redis时可能遇到的问题和解决方案。
119 1
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
|
18天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
61 2
|
22天前
|
Linux 知识图谱
Centos7安装killall,fuser, killall,pstree和pstree.x11
通过上述步骤,您已在CentOS 7系统中成功部署了killall、fuser、pstree以及pstree.x11,为高效管理系统进程打下了坚实基础。更多关于服务器管理与优化的知识,获取全面技术支持与解决方案。
28 1
|
22天前
|
监控 安全 Linux
CentOS7下安装配置ntp服务的方法教程
通过以上步骤,您不仅能在CentOS 7系统中成功部署NTP服务,还能确保其配置合理、运行稳定,为系统时间的精确性提供保障。欲了解更多高级配置或遇到特定问题,提供了丰富的服务器管理和优化资源,可作为进一步学习和求助的平台。
49 1
|
4天前
|
存储 安全 Linux
VMware安装CentOS7
【11月更文挑战第11天】本文详细介绍了在 VMware 中安装 CentOS 7 的步骤,包括准备工作、创建虚拟机、配置虚拟机硬件和安装 CentOS 7。具体步骤涵盖下载 CentOS 7 镜像文件、安装 VMware 软件、创建和配置虚拟机硬件、启动虚拟机并进行安装设置,最终完成 CentOS 7 的安装。在安装过程中,需注意合理设置磁盘分区、软件选择和网络配置,以确保系统的性能和功能满足需求。