K8S快速入门-1基础介绍环境搭建

K8S快速入门-1基础介绍环境搭建

1. kubnernetes介绍

1.1 从容器到容器编排问题,背景

目前已经发展到容器化部署时代,docker等。但是容器化的部署方式带来了问题的出现,称之为容器编排问题

横向扩展是一个非常重要且实用的分支,在业务场景非常常见

image-20230123235917545

image-20230123235958781

1.2 k8s简介

image-20230124003953517 image-20230124004048821

1.3 组件

一组服务器集群,可以在集群的每个节点上运行特定的程序,来对节点进行容器管理

一个k8s集群主要是由控制节点(master)、工作节点(node)组成,每个节点上都会安装不同的组件

image-20230124005253931 image-20230124010032538

1.3.1 控制节点(master)

集群的控制平面,负责集群的决策

ApiServer是控制的访问入口

image-20230124005136380

1.3.2 工作节点(node)

KubeProxy是服务的访问入口

image-20230124005208572

1.4 概念

image-20230124010154266

2. k8s集群环境搭建

2.1 环境规划

2.1.1 集群类型

image-20230124115059708

本次搭建的是一主两从类型的集群

2.1.2 安装方式

image-20230124115209601

使用kubeadm方式!

2.1.3 主机规划

image-20230124115245427

在自己的学习方式里,使用实验室服务器的h5, h6, h9来进行搭建,其中h9作为master节点!

查看操作系统的命令:uname -a

作用 IP地址 操作系统 配置
Node2 h1 Ubuntu16.04 None
Node1 h7 Ubuntu16.04 None
Master h9 Ubuntu20.04 None

2.2 环境搭建

在每台linux中分别安装docker、kubeadm、kubelet、kubectl程序

环境配置的那些网络步骤就不搞了,正好实验室服务器已经搞好了

2.2.1 主机安装

跳过

2.2.2 环境初始化

主机解析已经h5 h7 h9了

企业内部建议开启自己的时间同步服务器,要么就是从网上同步,肯定是有方式的

其他一些操作,比如iptables那些的就不操作了,怕把机器搞坏了,主要还是在实际操作过程中看看会不会有什么问题

2.2.3 安装docker(参考以前的博客)

教程中用的是centos,自己服务器用ubuntu

docker安装参考自己的另外一篇博客:

https://yixuan004.github.io/2022/11/25/develop/docker/docker%E4%BD%BF%E7%94%A8/Docker%E7%A6%BB%E7%BA%BF%E5%AE%89%E8%A3%85/

链接: https://pan.baidu.com/s/1EpX_W_l3lPtXrXIoi_KPPg 提取码: 4xmc

docker安装完成后,要添加docker的配置文件,这个之前没有用到过,反正就是按照教程里的修改一下了,以防之后有什么奇葩问题

暂时没有操作这么一步,看看后续会不会有什么问题再来说

新建/etc/docker/daemon.json目录,然后编辑文件daemon.json

1
2
3
4
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://kn0t2bca.mirror.aliyuns.com"]
}

2.2.4 安装kubernetes组件(kubeadm,kubelet,kubectl)

  • 添加镜像源

1.首先备份原始下载源文件:

1
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bk

2.然后写入新的下载源地址:

1
vi /etc/apt/sources.list
1
2
3
4
5
6
7
8
9
10
11
#阿里云
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

3.更新源那些的操作

1
2
3
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get upgrade
  • apt-get update报错
image-20230124164527295
1
2
3
4
5
6
7
8
9
root@h6:~# sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FCAE110B1118213C
Executing: /tmp/tmp.coV1HT36ly/gpg.1.sh --keyserver
keyserver.ubuntu.com
--recv-keys
FCAE110B1118213C
gpg: 下载密钥‘1118213C’,从 hkp 服务器 keyserver.ubuntu.com
gpg: 密钥 1118213C:公钥“Launchpad PPA for Graphics Drivers Team”已导入
gpg: 合计被处理的数量:1
gpg: 已导入:1 (RSA: 1)
  • apt-get 依赖: cri-tools (>= 1.26.0) 但是它将不会被安装
1
sudo apt-get --fix-broken install

kubelet: k8s 的核心服务

kubeadm: 这个是用于快速安装 k8s 的一个集成工具,我们在master1和worker1上的 k8s 部署都将使用它来完成。

kubectl: k8s 的命令行工具,部署完成之后后续的操作都要用它来执行

其实这三个的下载很简单,直接用apt-get就好了,但是因为某些原因,它们的下载地址不存在了。所以我们需要用国内的镜像站来下载,也很简单,依次执行下面五条命令即可

1.使得 apt 支持 ssl 传输

1
apt-get update && apt-get install -y apt-transport-https

2.下载 gpg 密钥

1
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -

3.添加 k8s 镜像源

1
2
3
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

4.更新源列表

1
apt-get update

5.安装 kubectl,kubeadm以及 kubelet

1
2
apt-get install -y kubelet kubeadm kubectl
apt install kubelet=1.22.15-00 kubectl=1.22.15-00 kubeadm=1.22.15-00(降级会好一些,新版本老有奇怪问题)

6.运行systemctl start命令启动kubelet服务,并设置为开机自动启动

1
2
root@master01:/app# systemctl start kubelet
root@master01:/app# systemctl enable kubelet

这里又省略掉了一些安装内容,暂时不知道是不是需要,比如上面那个systemd的

2.3 准备集群镜像

该步骤不是必须的,可以在下面直接准备

2.4 集群初始化

2.4.1 master

image-20230124183721556

几个值的含义分别是:版本、pod网络(默认)、service网络(默认)、master节点ip

1
2
3
4
5
kubeadm init \
--image-repository=registry.aliyuncs.com/google_containers \
--apiserver-advertise-address=10.109.246.188 \
--pod-network-cidr=10.244.0.0/16 \
--kubernetes-version=v1.22.15

https://blog.csdn.net/qq_53014769/article/details/127809159

image-20230124222114480

如果搞错了,不要忘记先kubeadm reset

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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://kubernetes.io/docs/concepts/cluster-administration/addons/

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

kubeadm join 10.109.246.188:6443 --token c1enxk.6gi521ananpf4h0h \
--discovery-token-ca-cert-hash sha256:f49123e158401fae72d6419f19942cd2b5919f0786e74de3702989c264046b17

执行一下上面那几个mkdir

1
2
3
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

查看

1
2
3
4
kubectl get nodes
root@h9:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
h9 NotReady control-plane,master 3m2s v1.22.15

2.4.2 node

1
2
3
sudo swapoff -a
sudo kubeadm join 10.109.246.188:6443 --token c1enxk.6gi521ananpf4h0h \
--discovery-token-ca-cert-hash sha256:f49123e158401fae72d6419f19942cd2b5919f0786e74de3702989c264046b17
1
2
3
4
5
6
7
8
9
[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.

1
2
3
4
5
root@h9:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
h7 NotReady <none> 2m23s v1.22.15
h9 NotReady control-plane,master 8m36s v1.22.15

https://blog.csdn.net/qq_43762191/article/details/125567365

修改docker的daemon,和上面是一样的

截止目前,网络插件没有安装,所以都是NotReady

2.5 安装网络插件(master)

image-20230124223628227

原封不动运行好像就行了

1
2
3
4
5
6
7
8
wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
root@h9:~# kubectl apply -f kube-flannel.yml
namespace/kube-flannel created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created

稍等一下,就都变成ready状态了

1
2
3
4
root@h9:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
h7 Ready <none> 17m v1.22.15
h9 Ready control-plane,master 23m v1.22.15

2.6 环境测试

image-20230124224734454
1
2
3
4
5
6
7
8
9
10
11
root@h9:~# kubectl create deployment nginx --image=nginx:1.14-alpine
deployment.apps/nginx created
root@h9:~# kubectl expose deployment nginx --port=80 --type=NodePort
service/nginx exposed
root@h9:~# kubectl get pods,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-65c4bffcb6-d7dgf 1/1 Running 0 100s

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 27m
service/nginx NodePort 10.104.66.35 <none> 80:31934/TCP 49s

这里31934是暴露给外界的端口号


K8S快速入门-1基础介绍环境搭建
http://example.com/2023/01/23/develop/k8s/K8S快速入门-1基础介绍环境搭建/
作者
Curious;
发布于
2023年1月23日
许可协议