Kubernetes 安装命令, 运行库使用: CRI-O(runc)

本文详细介绍如何从零开始搭建Kubernetes集群,包括环境准备、软件安装、系统配置及服务启用等步骤。涵盖SELinux设置、网络配置、CRI-O与kubelet服务启动,以及通过kubeadm进行初始化与节点加入的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


export APISERVER_ADVERTISE_ADDRESS=0.0.0.0
export KUBE_YAML_DIR=/etc/kubernetes/yaml/ && mkdir -p ${KUBE_YAML_DIR}


# set hostname
hostnamectl set-hostname nie-master

# Install prerequisites

cat <<EOF > /etc/yum.repos.d/paas7-crio.repo
[paas7-crio]
name=CRI-O
baseurl=https://cbs.centos.org/repos/paas7-crio-311-candidate/x86_64/os/
enabled=1
exclude=crio*
EOF

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kube*
EOF

# Install Package

# cri-o
yum install -y runc
yum install -y cri-o  --nogpgcheck --disableexcludes=crio

# kube*
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

# Change Settings

# set SELinux in permissive mode (effectively disabling it)
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

# probe bridge
modprobe br_netfilter

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

# cri-o config
sed -i 's/^cgroup_manager = "systemd"$/cgroup_manager = "cgroupfs"/' /etc/crio/crio.conf
# change default registries
sed -ie ':begin; /^#registries = \[$/,/^# \]$/ { /# \]/! { $! { N; b begin }; }; s/#registries = \[.*\]/registries = ["registry.access.redhat.com", "registry.fedoraproject.org", "docker.io"]/; };' /etc/crio/crio.conf

# Enable Service
systemctl enable crio && systemctl start crio
systemctl enable kubelet && systemctl start kubelet

# kubeadm init phase preflight 
kubeadm init phase certs all --apiserver-cert-extra-sans=apiserver.k8s.com,47.75.199.41 --service-dns-domain="nieml.k8s" --apiserver-advertise-address=${APISERVER_ADVERTISE_ADDRESS}
kubeadm init phase kubeconfig all --apiserver-advertise-address=${APISERVER_ADVERTISE_ADDRESS}
kubeadm init phase kubelet-start --cri-socket=unix:///var/run/crio/crio.sock

kubeadm init phase control-plane apiserver --apiserver-advertise-address=${APISERVER_ADVERTISE_ADDRESS} --apiserver-extra-args="service-node-port-range=1-65535"
kubeadm init phase control-plane scheduler
kubeadm init phase control-plane controller-manager --pod-network-cidr=10.244.0.0/16

# 如果需要自动分配网段 需要编辑 /etc/kubernetes/manifests/kube-controller-manager.yaml
# 在命令行里加入:  --allocate-node-cidrs=true

kubeadm init phase etcd local

kubeadm init phase mark-control-plane
kubeadm init phase bootstrap-token

kubeadm init phase addon kube-proxy --apiserver-advertise-address=${APISERVER_ADVERTISE_ADDRESS} --pod-network-cidr=10.244.0.0/16
kubeadm init phase addon coredns --service-cidr="10.96.0.0/12" --service-dns-domain="nieml.k8s"

export KUBECONFIG=/etc/kubernetes/admin.conf
echo 'export KUBECONFIG=/etc/kubernetes/admin.conf' >> /etc/profile.d/kubernetes.sh

# kubectl taint nodes --all node-role.kubernetes.io/master-

# Install Flannel

wget https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml -O ${KUBE_YAML_DIR}/kube-flannel.yml

# apply flannel
kubectl apply -f ${KUBE_YAML_DIR}/kube-flannel.yml

# Install Dashboard

wget https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml -O ${KUBE_YAML_DIR}/kubernetes-dashboard.yaml

# generate crets
mkdir -p /etc/kubernetes/pki/dashboard/
openssl genrsa -des3 -passout pass:x -out /etc/kubernetes/pki/dashboard/dashboard.pass.key 2048
openssl rsa -passin pass:x -in /etc/kubernetes/pki/dashboard/dashboard.pass.key -out /etc/kubernetes/pki/dashboard/dashboard.key
rm -f /etc/kubernetes/pki/dashboard/dashboard.pass.key
openssl req -new -key /etc/kubernetes/pki/dashboard/dashboard.key -out /etc/kubernetes/pki/dashboard/dashboard.csr
openssl x509 -req -sha256 -days 365 -in /etc/kubernetes/pki/dashboard/dashboard.csr -signkey /etc/kubernetes/pki/dashboard/dashboard.key -out /etc/kubernetes/pki/dashboard/dashboard.crt

# create certificates secret
kubectl create secret generic kubernetes-dashboard-certs --from-file=/etc/kubernetes/pki/dashboard/ -n kube-system

# delete dashboard default certificates secret
sed -ie ':begin; /Dashboard Secret/,/^---$)/ { /^---$/! { $! { N; b begin }; }; s/Dashboard Secret.*type: Opaque\n\n---/Delete: Dashboard Secret ------------------- #/; };' ${KUBE_YAML_DIR}/kubernetes-dashboard.yaml

# change certificates parameters
sed -i 's/--auto-generate-certificates/--auto-generate-certificates=false\n          - --tls-key-file=dashboard.key\n          - --tls-cert-file=dashboard.crt/' ${KUBE_YAML_DIR}/kubernetes-dashboard.yaml

# enable nodeport
sed -ie ':begin; /^  ports:$/,/^    - port: 443$/ { /    -/! { $! { N; b begin }; }; s/  ports:.*- port: 443/  type: NodePort\n  ports:\n    - port: 443\n      nodePort: 8443/; };' ${KUBE_YAML_DIR}/kubernetes-dashboard.yaml

vim ${KUBE_YAML_DIR}/kubernetes-dashboard.yaml

# apply flannel
kubectl apply -f ${KUBE_YAML_DIR}/kubernetes-dashboard.yaml

# Join token
kubeadm init phase upload-config all
JOIN_TOKEN=`kubeadm token create`
JOIN_CERTHAST=`openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'`

echo "kubeadm join --token ${JOIN_TOKEN} apiserver.k8s.com:6443 --discovery-token-ca-cert-hash sha256:${JOIN_CERTHAST}"

# show dashboard token
kubectl -n kube-system describe `kubectl -n kube-system get secret -o name | grep dashboard-token`




# CentOS 报 /system.slice/kubelet.service 可以改 kubelet.service , 给 server 段添加下面内容即可

CPUAccounting=true
MemoryAccounting=true
### CRI-O容器运行时的使用指南与配置示例 CRI-O 是一个专为 Kubernetes 设计的轻量级容器运行时实现,遵循 Open Container Initiative (OCI) 标准,并实现了 Kubernetes 容器运行时接口 (CRI)[^4]。以下是关于 CRI-O 的安装、配置和使用的详细信息。 #### 1. 系统要求 在开始安装 CRI-O 之前,请确保系统满足以下最低要求: - 操作系统:支持的 Linux 发行版(如 CentOS、Ubuntu 等)。 - 内核版本:建议使用较新的内核版本以获得更好的兼容性和安全性。 - 容器工具:需要安装 `runc` 或其他 OCI 兼容的运行时[^4]。 #### 2. 安装步骤 以下是 CRI-O 的安装步骤: ```bash # 更新系统包 sudo yum update -y # 安装必要的依赖项 sudo yum install -y \ git \ go \ make \ btrfs-progs-devel \ device-mapper-devel \ glib2-devel \ glibc-static \ libassuan-devel \ libseccomp-devel \ pigz # 克隆 CRI-O 项目代码 git clone https://gitcode.com/gh_mirrors/cr/cri-o /usr/src/cri-o # 进入项目目录并构建 cd /usr/src/cri-o make sudo make install ``` 完成上述步骤后,CRI-O 将被成功安装到系统中[^1]。 #### 3. 配置 CRI-O CRI-O 的主要配置文件位于 `/etc/crio/crio.conf`。可以通过编辑该文件来调整运行时的行为。以下是一些关键配置项: - **存储驱动**:默认使用 `overlay2` 文件系统作为存储驱动。如果需要更改,可以修改 `storage_driver` 参数。 - **镜像仓库**:通过 `image_pull_policy` 参数设置镜像拉取策略。 - **网络配置**:确保 CNI(Container Network Interface)插件已正确配置,通常使用 `flannel` 或 `calico`。 配置完成后,启动并启用 CRI-O 服务: ```bash sudo systemctl start crio sudo systemctl enable crio ``` #### 4. 使用 CRI-O 为了验证 CRI-O 是否正常工作,可以使用 `crictl` 工具进行测试。首先,确保 `crictl` 已正确安装并配置[^3]。 ```bash # 拉取测试镜像 crictl pull nginx:latest # 创建容器 container_id=$(crictl run --name my-nginx-container nginx:latest) # 查看运行中的容器 crictl ps # 停止容器 crictl stop $container_id # 删除容器 crictl rm $container_id ``` #### 5. 与 Kubernetes 集成 要将 CRI-O 与 Kubernetes 集成,需指定正确的 CRI 套接字路径。例如,在初始化 Kubernetes 集群时,可以通过以下命令指定 CRI-O 的套接字路径[^2]: ```bash kubeadm init --cri-socket=unix:///var/run/crio/crio.sock ``` 此外,还需确保 Kubernetes 的 Kubelet 配置文件中指定了正确的 CRI 套接字路径。 --- ### 示例代码 以下是一个简单的 CRI-O 配置文件示例: ```ini [crio] runtime = "runc" conmon = "/usr/libexec/crio/conmon" oci_hooks_spec_dir = "/etc/containers/oci/hooks.d" [crio.network] network_dir = "/etc/cni/net.d" plugin_dirs = ["/opt/cni/bin"] [crio.image] default_transport = "docker://" ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值