前言

最近在看云原生,安装Kubernetes(以下简称k8s)出现了不少的问题,这里将我的安装步骤和可能出现的问题进行整理,如有问题可以在下面留言相互学习。另提醒我用的是阿里云服务器(centos)。

安装docker

安装前准备

更新yum包:
sudo yum update

安装依赖包:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

设置yum下载源为阿里云:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

注意: yum-utils提供yum-config-manager功能,device-mapper-persistent-data和lvm2是devicemapper驱动所依赖的包。

下载docker

sudo yum install docker-ce

查看docker状态:
systemctl status docker

将docker设置为开机自启动:
systemctl enable docker

一些基本命令:

systemctl stop docker      #停止Docker守护进程
systemctl restart docker   #重启Docker守护进程
systemctl enable docker    #设置Docker开机自启动
systemctl status docker    #查看Docker的运行状态

利用阿里云镜像加速器

sudo mkdir -p /etc/docker 
sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://你自己的.mirror.aliyuncs.com"] } EOF 
sudo systemctl daemon-reload 
sudo systemctl restart docker

部署k8s

准备工作

安装依赖: yum install -y ebtables socat

关闭selinux:

sed -i 's#SELINUX=enforcing#SELINUX=disabled#g'  /etc/sysconfig/selinux

sed -i 's#SELINUX=enforcing#SELINUX=disabled#g'  /etc/selinux/config

setenforce 0

设置路由

cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

关闭系统的Swap: swapoff -a
(使用free -m确认swap已经关闭)

配置下载源

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
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

下载相应的包:yum install -y kubelet kubeadm kubectl

部署

配置一个 kubeadm.yaml(k8s 1.24后不支持docker了)

apiVersion: kubeadm.k8s.io/v1beta3 #版本信息参考kubeadm config print init-defaults命令结果
kind: ClusterConfiguration
kubernetesVersion: 1.23.0 #根据自己安装的k8s版本来写,版本信息参考kubeadm config print init-defaults命令结果
imageRepository: registry.aliyuncs.com/google_containers #配置国内镜像

apiServer:
  extraArgs:
    runtime-config: "api/all=true"

etcd:
  local:
    dataDir: /data/k8s/etcd

这里如果直接执行部署,那会出现错误,通过 journalctl -f -u kubelet 可以知道错误是:kubelet cgroup driver: “cgroupfs” is different from docker cgroup driver: “systemd”,这里我们提前修改吧,省的后面出错

修改配置文件
1- daemon.json文件: /etc/docker/daemon.json

  "exec-opts": ["native.cgroupdriver=systemd"]

2- 10-kubeadm.con文件: /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf

在KUBELET_KUBECONFIG_ARGS 后面追加 --cgroup-driver=systemd

3- kubeadm-flags.env 文件: /var/lib/kubelet/kubeadm-flags.env

KUBELET_KUBEADM_ARGS="--cgroup-driver=systemd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.2"

部署

kubeadm init --config kubeadm.yaml (如果失败了用找到了问题后,kubeadm reset 重置,在执行)

出现信息就是部署说明成功了:

kubeadm join xxx.xxx.xxx.xxx:6443 --token z9pr14.s1is23wqh3514epb \ --discovery-token-ca-cert-hash sha256:d52392f5f240babddb108a3d28be58d5e95dc8a197f09108c5fe8687ba64d4ec

kubectl get pods -A 命令查看pod状态,我用的是2G4核服务器有点慢,需要等20分钟才全部跑好,所以这里走到这里我们可以先休息会,打把游戏回来再看看。(如果一直是这样的话,可以看下下面的参考链接)

注意
1- 执行的时候如果报 ”unknown service runtime.v1alpha2.RuntimeService” ,可以执行下面的命令后重新执行

rm /etc/containerd/config.toml 
systemctl restart containerd

2- kubeadm.yaml中字段kubernetesVersion 需要换成自己的k8s版本

安装dashboard

下载dashboard

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc6/aio/deploy/recommended.yaml\

配置端口:
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

将type: ClusterIP改为NodePort

查看dashboard要使用的端口,在阿里云服务器安全组配置将端口开放

kubectl get svc -A | grep kubernetes-dashboard

image.png

访问
通过 https://集群任意节点的公网IP:端口, 这里可能出现如下问题(证书的问题)

image.png
我们可以简单点处理: 在当前页面,键盘输入thisisunsafe

创建访问令牌
新建一个dashboard.yaml文件

# 准备一个yaml文件: vim dash.yaml  填入以下内容
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard

创建账号
kubectl apply -f dashboard.yaml
生成token

kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')\

登陆

image.png

参考链接

# K8S集群启动报错kubelet cgroup driver: “cgroupfs“ is different from docker cgroup driver: “systemd“

k8s创建完集群之后coredns一直处于pending状态
# 解决chrome"您的连接不是私密连接"问题

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐