安装K8S单节点
Kubernetes v1.24.2 环境准备
如下是基于CentOS7系统部署Kubernetes v1.24.2 版本单节点环境所需要的详细步骤(参考Bootstrapping clusters with kubeadm),其它系统请参考修改:
配置系统参数
1# 配置二层转发时也去调用 iptables 配置的三层规则
2$ cat <<EOF > /etc/sysctl.d/k8s.conf
3net.bridge.bridge-nf-call-ip6tables = 1
4net.bridge.bridge-nf-call-iptables = 1
5EOF
6$ sysctl --system
7# 加载br_netfilter模块
8$ modprobe br_netfilter
9$ lsmod | grep br_netfilter
安装容器运行态
由于从v1.24大版本开始,Kubernetes便不再支持Docker。因此这里我们以containerd为容器运行时来安装演示环境(参考Getting started with containerd):
1# 安装containerd
2$ wget https://github.com/containerd/containerd/releases/download/v1.6.6/containerd-1.6.6-linux-amd64.tar.gz
3$ tar Cxzvf /usr/local containerd-1.6.2-linux-amd64.tar.gz
4# 通过systemd管理containerd
5$ wget https://github.com/containerd/containerd/blob/main/containerd.service
6$ cp containerd.service /usr/local/lib/systemd/system/containerd.service
7$ systemctl daemon-reload
8$ systemctl enable --now containerd
9# 安装runc
10$ wget https://github.com/opencontainers/runc/releases/download/v1.1.3/runc.amd64
11$ install -m 755 runc.amd64 /usr/local/sbin/runc
12# 安装CNI插件
13$ wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
14$ tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.1.1.tgz
15# 检查安装是否正常
16$ crictl version
17
18# 导出默认配置
19$ containerd config default > /etc/containerd/config.toml
20# 配置systemd cgroup
21[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
22 ...
23 [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
24 SystemdCgroup = true
25# 重启containerd
26$ systemctl restart containerd
27# 检查运行是否正常
28$ crictl version
安装kubeadm、kubelet以及kubectl
1# 安装yum源
2$ cat <<EOF > /etc/yum.repos.d/kubernetes.repo
3[kubernetes]
4name=Kubernetes
5baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
6enabled=1
7gpgcheck=0
8repo_gpgcheck=0
9gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
10 http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
11EOF
12
13$ yum clean all
14$ yum makecache
15$ yum repolist
16
17# 安装kubeadm、kubelet以及kubectl
18$ yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
19$ systemctl enable --now kubelet
20# attention: should be stopped status
21$ systemctl status kubelet
22
23# 利用kubeadm安装Kubernetes集群(其中x.x.x.x替换为母机IP)
24# 另外注意国内无法访问google镜像仓库,因此需要通过参数image-repository替换镜像源
25$ kubeadm init --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --pod-network-cidr=194.71.0.0/16 --service-cidr=194.70.255.0/24 --kubernetes-version=v1.24.2 --apiserver-advertise-address x.x.x.x --v=5
26
27# 安装成功后执行
28$ mkdir -p $HOME/.kube
29$ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
30$ chown $(id -u):$(id -g) $HOME/.kube/config
安装网络插件
1# 下载yaml文件
2$ wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
3# 修改Network参数为'--pod-network-cidr'内容: 194.71.0.0/16
4# 安装flannel CNI插件
5$ kubectl apply -f kube-flannel.yml
部署应用,简单测试
1# 去污点
2$ kubectl taint nodes --all node-role.kubernetes.io/master-
3$ kubectl taint nodes --all node-role.kubernetes.io/control-plane-
4# 部署nginx deployment
5$ echo "
6---
7apiVersion: v1
8kind: Service
9metadata:
10 labels:
11 app: echo
12 name: echo
13spec:
14 ports:
15 - port: 8080
16 name: high
17 protocol: TCP
18 targetPort: 8080
19 - port: 80
20 name: low
21 protocol: TCP
22 targetPort: 8080
23 selector:
24 app: echo
25---
26apiVersion: apps/v1
27kind: Deployment
28metadata:
29 labels:
30 app: echo
31 name: echo
32spec:
33 replicas: 2
34 selector:
35 matchLabels:
36 app: echo
37 strategy: {}
38 template:
39 metadata:
40 creationTimestamp: null
41 labels:
42 app: echo
43 spec:
44 containers:
45 - image: superedge/echoserver:2.2
46 name: echo
47 ports:
48 - containerPort: 8080
49 env:
50 - name: NODE_NAME
51 valueFrom:
52 fieldRef:
53 fieldPath: spec.nodeName
54 - name: POD_NAME
55 valueFrom:
56 fieldRef:
57 fieldPath: metadata.name
58 - name: POD_NAMESPACE
59 valueFrom:
60 fieldRef:
61 fieldPath: metadata.namespace
62 - name: POD_IP
63 valueFrom:
64 fieldRef:
65 fieldPath: status.podIP
66 resources: {}
67" | kubectl apply -f -
68
69$ kubectl get svc
70NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
71echo ClusterIP 194.70.255.237 <none> 8080/TCP,80/TCP 66s
72$ kubectl get pods -o wide
73NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
74echo-67b57bb686-lp4ft 1/1 Running 0 2m37s 194.71.0.7 devlop.novalocal <none> <none>
75echo-67b57bb686-mch4q 1/1 Running 0 3m23s 194.71.0.6 devlop.novalocal <none> <none>
76
77$ curl 194.70.255.237|grep "pod IP"
78 % Total % Received % Xferd Average Speed Time Time Time Current
79 Dload Upload Total Spent Left Speed
80100 501 0 501 0 0 279k 0 --:--:-- --:--:-- --:--:-- 489k
81 pod IP: 194.71.0.6
82$ curl 194.70.255.237|grep "pod IP"
83 % Total % Received % Xferd Average Speed Time Time Time Current
84 Dload Upload Total Spent Left Speed
85100 501 0 501 0 0 374k 0 --:--:-- --:--:-- --:--:-- 489k
86 pod IP: 194.71.0.7
综上,基于v1.24.2版本的单节点Kubernetes环境就部署好了

评论列表:
暂无评论 😭