安装Kubernetes(k8s)教程
借鉴文章:
https://www.cnblogs.com/Sunzz/p/15184167.html
https://www.yuque.com/xuxiaowei-com-cn/gitlab-k8s/k8s-install
一、安装环境说明
硬件要求
内存:2GB或更多RAM
CPU: 2核CPU或更多CPU
硬盘: 30GB或更多
二、环境准备
1.关闭防火墙和selinux
关闭防火墙
systemctl stop firewalld && systemctl disable firewalld && iptables -F
关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config && setenforce 0
2. 关闭swap分区
临时关闭
swapoff -a
永久关闭swap
sed -i 's/.*swap.*/#&/' /etc/fstab
三、安装docker
1.配置yum源
#wget工具从阿里云的 docker-ce 镜像源地址下载 docker-ce.repo 文件,并将其保存到 /etc/yum.repos.d/ 目录下
yum install wget -y
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
2. 安装docker
#系统将自动从阿里云 docker-ce 镜像源安装最新版本的 Docker CE 工具
yum install docker-ce docker-ce-cli -y
3.编辑docker配置文件
mkdir /etc/docker/
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://gqs7xcfd.mirror.aliyuncs.com","https://hub-mirror.c.163.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
#重新加载配置文件
systemctl daemon-reload
4.启动docker服务
systemctl daemon-reload && systemctl enable docker && systemctl start docker
5.可以使用 yum 包管理器来安装指定版本的 Docker
- 移除旧版本的 Docker:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
- 列出所有docker版本
yum list docker-ce.x86_64 --showduplicates |sort
- 安装所需版本的 Docker:
yum install docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io
- 启动docker服务
systemctl start docker
四、安装kubeadm,kubelet和kubectl
1.添加k8s镜像仓库
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
# 是否开启本仓库
enabled=1
# 是否检查 gpg 签名文件,下载最新版本可能签名校验无法通过,修改为0则不校验
gpgcheck=0
# 是否检查 gpg 签名文件,下载最新版本可能签名校验无法通过,修改为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.设置内核参数,优化 Kubernetes 群集的网络性能
# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
# 应用 sysctl 参数而不重新启动
sudo sysctl --system
3.安装指定版本的kubeadm,kubelet,kubectl
# 如果你看到有人说 node 节点不需要安装 kubectl,其实这种说法是错的,kubectl 会被当做依赖安装,如果安装过程没有指定 kubectl 的版本,则会安装最新版的 kubectl,可能会导致程序运行异常
# 列出所有kubelet kubeadm kubectl 版本
# yum --showduplicates list kubelet --nogpgcheck
# yum --showduplicates list kubeadm --nogpgcheck
# yum --showduplicates list kubectl --nogpgcheck
yum install -y kubelet-1.25.3-0 kubeadm-1.25.3-0 kubectl-1.25.3-0 --disableexcludes=kubernetes --nogpgcheck
--disableexcludes=kubernetes
选项用于禁用 yum
的 exclude
插件,以确保 Kubernetes 仓库中的所有软件包都能被 yum
正常下载和安装。这个选项通常在启用了 exclude
插件导致 Kubernetes 应用无法正常工作的情况下使用。
--nogpgcheck
选项用于禁止 yum
在下载软件包时对 GPG 签名进行验证。默认情况下,yum
每次下载软件包时都会检查软件包的签名,以确保软件包未被篡改或植入恶意代码。但有时,由于网络问题或其他原因,软件包的 GPG 签名无法验证通过,这就需要使用 --nogpgcheck
选项来跳过 GPG 签名验证,以确保软件包能够被正确安装。
4.设置开机自启
#重新加载了 systemd 配置文件
systemctl daemon-reload
#启动kubelet
sudo systemctl restart kubelet
#开机自启kubelet
sudo systemctl enable kubelet
5.查看kubelet日志
# k8s 未初始化时,kubelet 可能无法启动
journalctl -xefu kubelet
6.查看kubelet状态
# k8s 未初始化时,kubelet 可能无法启动
systemctl status kubelet
五、部署Kubernetes Master节点
1.初始化
kubeadm init --image-repository=registry.aliyuncs.com/google_containers
# 指定集群的IP
# kubeadm init --image-repository=registry.aliyuncs.com/google_containers --apiserver-advertise-address=192.168.29.141
#kubeadm init \
--kubernetes-version 1.25.3 \
--apiserver-advertise-address=0.0.0.0 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.245.0.0/16 \
--image-repository registry.aliyuncs.com/google_containers
# 初始化失败后,可进行重置,重置命令:kubeadm reset
# 执行成功后,会出现类似下列内容:
# kubeadm join 192.168.29.141:6443 --token zvrmgc.aicmw5ytnk7p1hs6 \
--discovery-token-ca-cert-hash sha256:5474595223ac9b475bff69987421ea9daf4692768e1891365a89f8dc1ecaf764
参数说明
–kubernetes-version v1.25.3 指定版本
–apiserver-advertise-address 为通告给其它组件的IP,一般应为master节点的IP地址
–service-cidr 指定service网络,不能和node网络冲突
–pod-network-cidr 指定pod网络,不能和node网络、service网络冲突
–image-repository registry.aliyuncs.com/google_containers 指定镜像源,由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址。
如果k8s版本比较新,可能阿里云没有对应的镜像,就需要自己从其它地方获取镜像了。
–control-plane-endpoint 标志应该被设置成负载均衡器的地址或 DNS 和端口(可选)
2. 配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3. 查看节点信息
kubectl get nodes
#此时只能看到master节点,等待其他节点加入进来后即可看到。
#可以看到STATUS状态都是NotReady,这是因为确实网络插件导致的,等安装好网络插件就好了
4. 将从节点加入集群(可选)
kubeadm join 192.168.29.141:6443 --token zvrmgc.aicmw5ytnk7p1hs6 \
--discovery-token-ca-cert-hash sha256:5474595223ac9b475bff69987421ea9daf4692768e1891365a89f8dc1ecaf764
5. 控制面板
#获取所有 Kubernetes 集群中运行的 Pod
kubectl get pods --all-namespaces -o wide
--all-namespaces
选项表示获取所有命名空间中的 Pod,而不仅仅是默认命名空间;-o wide
选项则表示以宽松格式(wide format)输出结果。
#获取 Kubernetes 集群中所有节点
kubectl get nodes -o wide
-o wide
选项表示以宽松格式(wide format)输出结果,该格式包含了更多的信息,例如节点的名称、IP 地址、所在区域、所在可用性区域、节点状态、内存和 CPU 使用情况等。
6. 控制面板(master)作为node使用(去污)
#**查看当前软件的去污的命令参数**
kubectl get no -o yaml | grep taint -A 10
# 1.24.0 版本需要使用下列命令去污
# kubectl taint nodes --all node-role.kubernetes.io/master-
六、安装插件
配置网络,选择 Calico 配置
# 下载
wget --no-check-certificate https://projectcalico.docs.tigera.io/archive/v3.20/manifests/calico.yaml
# 修改 calico.yaml 文件
vim calico.yaml
# 在 - name: CLUSTER_TYPE 下方添加如下内容
- name: CLUSTER_TYPE
value: "k8s,bgp"
# 下方为新增内容
- name: IP_AUTODETECTION_METHOD
value: "interface=网卡名称"
# INTERFACE_NAME=ens33
# sed -i '/k8s,bgp/a \ - name: IP_AUTODETECTION_METHOD\n value: "interface=INTERFACE_NAME"' calico.yaml
# sed -i "s#INTERFACE_NAME#$INTERFACE_NAME#g" calico.yaml
# 配置网络
kubectl apply -f calico.yaml
七、测试
创建 nginx 服务
cat > nginx.yaml << EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.23.2
ports:
- containerPort: 80
EOF
cat nginx.yaml
kubectl apply -f nginx.yaml
# 编辑
# kubectl edit deployment nginx-deployment
kubectl get pods --all-namespaces -o wide
CentOS 命令自动补充
1、安装 bash-completion
yum install -y bash-completion
2、拷贝 kubernetes 的自动补全脚本到系统补全目录中
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
3、重新加载环境变量,使设置生效
source ~/.bashrc
Token 相关命令
1、 控制平面节点上运行以下命令来获取令牌
kubeadm token list
2、 默认情况下,令牌会在 24 小时后过期,可以通过在控制平面节点上运行以下命令来创建新令牌
kubeadm token create
相关命令
1、 查看更多信息
-o wide
2、 查看所有命名空间
--all-namespaces
3、 查看指定命名空间
-n 命名空间
4、查看所有 pod
kubectl get pods --all-namespaces -o wide
5、查看pod描述
kubectl -n 命名空间 describe pod 名称
6、删除pod
kubectl -n 命名空间 delete pod 名称
7、进入pod
kubectl exec -it pod名称 bash
8、查看 Service Account
#查看所有 Service Account
kubectl get sa --all-namespaces
#查看指定命名空间 Service Account
kubectl -n 命名空间 get sa
9、查看pv
kubectl get pv
10、查看pvc
kubectl get pvc
11、查看角色绑定
kubectl get rolebinding --all-namespaces -o wide
拆卸Kubernetes(k8s)
拆卸docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
拆卸podman
yum erase podman buildah
拆卸k8s
yum remove -y kubelet kubeadm kubectl
kubeadm reset -f
modprobe -r ipip
lsmod
rm -rf ~/.kube/
rm -rf /etc/kubernetes/
rm -rf /etc/systemd/system/kubelet.service.d
rm -rf /etc/systemd/system/kubelet.service
rm -rf /usr/bin/kube*
rm -rf /etc/cni
rm -rf /opt/cni
rm -rf /var/lib/etcd
rm -rf /var/etcd
Q.E.D.