k8s【kubernetes】集群搭建(0>1)

文章目录

1、搭建K8S环境平台规划

2、服务器硬件配置要求

3、搭建k8s集群部署方式

4、kubeadm方式部署——系统初始化操作

5、kubeadm方式部署——部署master节点
 
1️⃣所有节点安装Docker

2️⃣所有节点配置阿里云Docker、kubernetes镜像

3️⃣所有节点安装kubelet kubeadm kubectl

4️⃣部署Kubernetes Master节点

6、kubeadm方式部署——部署node节点
5️⃣将 Node节点 加入到Kubernetes Master节点
6️⃣部署CNI网络插件
7️⃣测试kubernetes集群
7. kubeadm常用的命令


1、搭建K8S环境平台规划


2、服务器硬件配置要求
测试环境配置要求

节点    CPU内核数    内存大小    硬盘大小
master    2核及以上    4G及以上    20GB及以上
node    4核及以上    8G及以上    40GB及以上
生产环境配置要求

配置要求更高。

3、搭建k8s集群部署方式
(1)kubeadm

是一个K8S部署工具,提供kubeadm init 和 kubeadm join,用于快速部署K8S集群。

参考链接:使用 kubeadm 引导集群 | Kubernetes

(2)二进制包

4、kubeadm方式部署——系统初始化操作
kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具,这个工具能通过两条指令完成一个kubernetes集群的部署:

第一、创建一个 Master 节点 kubeadm init

第二、将 Node 节点加入到当前集群中 kubeadm join <Master节点的IP和端口>

环境要求

工作节点    主机名    IP地址    系统版本    内存    CPU    磁盘
master    k8s-master    192.168.200.31    CentOS 7.9    2GB    2核    30GB
node1    k8s-node1    192.168.200.32    CentOS 7.9    8GB    2核    30GB
node2    k8s-node2    192.168.200.33    CentOS 7.9    8GB    2核    30GB
准备CentOS 7.9镜像安装三台虚拟机
硬件配置要求如上
三台虚拟机能够相互访问
虚拟机可以访问外网,拉去镜像
禁止swap分区
安装前准备工作

1、修改主机名
hostnamectl set-hostname k8s-master

2、添加主机名
cat >> /etc/hosts << EOF
192.168.200.31 k8s-master
192.168.200.32 k8s-node1
192.168.200.33 k8s-node2
EOF

3、关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
systemctl status firewalld

4、关闭selinux
# 临时允许
setenforce 0
getenforce 

# 永久允许
sed  -i "s/SELINUX=enforcing/SELINUX=permissive/g" /etc/selinux/config 
cat /etc/selinux/config

5、关闭swap分区
# 参考链接:https://www.cnblogs.com/architectforest/p/12982886.html
# 查看swapoff的版本
swapoff --version

# 临时关闭❎
swapoff -a

# 永久关闭❎
sed  -ri 's/.*swap.*/#&/' /etc/fstab		# 重启生效

# 使用swapon检查
swapon -v									#输出为空,表示swap已关闭

# 使用free命令检查
free -m

# 重新启动swap分区
swapon -a		

6、配置网卡联网
cat /etc/sysconfig/network-scripts/ifcfg-ens32 

7、配置阿里云镜像
cd /etc/yum.repos.d/ && mkdir bak &&  mv CentOS-* bak/
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

8、生成本地缓存
yum makecache fast

9、更新YUM源软件包
yum update -y	

10、将桥接的 IPv4 流量传递到 iptables 的链
cat >> /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# cat /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
[root@k8s-master ~]#

11、设置主机之间时间同步
yum install -y ntpdate
ntpdate time.windows.com


5、kubeadm方式部署——部署master节点
1️⃣所有节点安装Docker

#yum安装gcc相关环境(需要确保虚拟机可以上外网。)
yum install -y gcc && yum install -y gcc-c++

1、卸载旧版本docker
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2、安装需要的依赖包
yum install -y yum-utils


3、设置阿里云docker镜像
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo  				# 默认镜像源是国外的,不推荐使用

yum-config-manager \
    --add-repo \
     https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo		# 推荐使用国内镜像


4、安装docker  docker-ce   ee企业版
yum install -y docker-ce docker-ce-cli containerd.io


5、启动Docker
systemctl start docker && systemctl enable docker && systemctl status docker


6、查看docker版本信息
docker version


2️⃣所有节点配置阿里云Docker、kubernetes镜像

7、配置阿里云docker镜像加速
sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://w2kavmmf.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload && systemctl restart docker

8、配置阿里云Kubernetes 镜像
cat >> /etc/yum.repos.d/kubernetes.repo << EOF
[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

8、配置阿里云Kubernetes 镜像


3️⃣所有节点安装kubelet kubeadm kubectl

# 指定K8S版本安装,不指定版本默认安装最新版。
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
systemctl enable kubelet


4️⃣部署Kubernetes Master节点
这里指定阿里云镜像仓库地址,默认的镜像地址无法加载访问。

kubeadm init \
  --apiserver-advertise-address=192.168.200.31 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.18.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16

要开始使用集群,需要以普通用户的身份运行以下命令:

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

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS     ROLES    AGE    VERSION
k8s-master   NotReady   master   6m8s   v1.18.0
[root@k8s-master ~]# 


6、kubeadm方式部署——部署node节点
5️⃣将 Node节点 加入到Kubernetes Master节点
在Node端执行操作。

加入任何数量的工作节点,通过运行以下每一个根节点:

kubeadm join 192.168.200.31:6443 --token 3myqeb.35plbttpfc0tjlvz \
    --discovery-token-ca-cert-hash sha256:b8378ad91dc3c88577869edd53937f0be1851ae972035b8449e4eae875ef2542

# 集群状态为NotReady,需要添加CNI网络插件
[root@k8s-master ~]# kubectl get nodes
NAME         STATUS     ROLES    AGE    VERSION
k8s-master   NotReady   master   12m    v1.18.0
k8s-node01   NotReady   <none>   116s   v1.18.0
k8s-node02   NotReady   <none>   5s     v1.18.0

# 查看kubernetes版本
[root@k8s-master ~]# kubectl version
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.0", GitCommit:"9e991415386e4cf155a24b1da15becaa390438d8", GitTreeState:"clean", BuildDate:"2020-03-25T14:58:59Z", GoVersion:"go1.13.8", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.0", GitCommit:"9e991415386e4cf155a24b1da15becaa390438d8", GitTreeState:"clean", BuildDate:"2020-03-25T14:50:46Z", GoVersion:"go1.13.8", Compiler:"gc", Platform:"linux/amd64"}


默认token有效期为24小时,过期后,该token不能使用,需要重新创建token,命令如下:

kubeadm token create --print-join-command


6️⃣部署CNI网络插件

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

[root@k8s-master ~]# kubectl get pods -n kube-system
NAME                                 READY   STATUS    RESTARTS   AGE
coredns-7ff77c879f-9wt65             1/1     Running   0          26m
coredns-7ff77c879f-vf892             1/1     Running   0          26m
etcd-k8s-master                      1/1     Running   0          26m
kube-apiserver-k8s-master            1/1     Running   0          26m
kube-controller-manager-k8s-master   1/1     Running   0          26m
kube-flannel-ds-65b8n                1/1     Running   0          4m22s
kube-flannel-ds-nx6gj                1/1     Running   0          4m22s
kube-flannel-ds-r6f25                1/1     Running   0          4m22s
kube-proxy-9mvdl                     1/1     Running   0          26m
kube-proxy-pwd2b                     1/1     Running   0          14m
kube-proxy-zslgz                     1/1     Running   0          16m
kube-scheduler-k8s-master            1/1     Running   0          26m


查看集群节点状态是Ready

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS   ROLES    AGE   VERSION
k8s-master   Ready    master   28m   v1.18.0
k8s-node01   Ready    <none>   18m   v1.18.0
k8s-node02   Ready    <none>   16m   v1.18.0


7️⃣测试kubernetes集群
在Kubernetes集群中创建一个pod,验证是否正常运行:

# 拉取nginx镜像
kubectl create deployment nginx --image=nginx

# nginx启动完成
# kubectl get pod
NAME                    READY   STATUS    RESTARTS   AGE
nginx-f89759699-r6j49   1/1     Running   0          88s

# 暴露nginx端口80
kubectl expose deployment nginx --port=80 --type=NodePort

# 查看暴露端口信息
# kubectl get pod,svc
NAME                        READY   STATUS    RESTARTS   AGE
pod/nginx-f89759699-r6j49   1/1     Running   0          3m6s

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        37m
service/nginx        NodePort    10.101.19.205   <none>        80:31814/TCP   26s


访问地址:http://NodeIP:Port

kubectl create

kubectl create 命令用于在 Kubernetes 中创建资源。它可用于创建各种资源,包括 Pod、服务、部署等

例如,若要创建新部署,可以:

kubectl create deployment my-deployment --image=my-image
kubectl create deployment <deployment-name> --image=<image-name>
创建一个 Deployment 对象,指定容器镜像名称和部署名称。

kubectl create service <service-name> --tcp=<port>:<target-port>
创建一个 Service 对象,将容器的端口暴露到集群内部,并将其映射到指定的端口。

kubectl create configmap <configmap-name> --from-file=<path-to-file>
创建一个 ConfigMap 对象,用于存储应用程序的配置信息。

kubectl create secret generic <secret-name> --from-literal=<key>=<value>
创建一个 Secret 对象,用于存储敏感信息,如密码等。

kubectl create namespace <namespace-name>
创建一个 Namespace 对象,用于隔离和管理 Kubernetes 资源。

kubectl create job <job-name> --image=<image-name>
创建一个 Job 对象,用于在 Kubernetes 集群中运行一个或多个任务。

kubectl create cronjob <cronjob-name> --image=<image-name> --schedule=<cron-expression>
创建一个 CronJob 对象,用于定期运行一个或多个任务。
kubectl get

用于检索有关 Kubernetes 资源的信息。它可用于检索有关各种资源(包括 Pod、服务、部署等)的信息

例如,要检索有关 Kubernetes 集群中所有 Pod 的信息

kubectl get pods/deployments/svc/configmaps/secrets
 kubectl describe

用于检索有关特定 Kubernetes 资源的详细信息。它可用于检索有关各种资源(包括 Pod、服务、部署等)的信息。

要检索有关特定容器的详细信息

kubectl describe pod <pod-name>
 kubectl delete

用于删除 Kubernetes 资源。它可用于删除各种资源,包括 Pod、服务、部署

例如,要删除特定 Pod 

kubectl delete pod my-pod

kubectl exec
kubectl exec 命令用于在正在运行的容器中执行命令。它可用于在各种容器中执行命令,包括 Pod、服务、部署等。

例如,要在正在运行的 Pod 中执行命令

kubectl exec my-pod -- ls 
kubectl exec -it <pod-name> /bin/bash/
kubectl logs

kubectl logs 命令用于从容器中检索日志。它可用于从各种容器(包括 Pod、服务、部署等)中检索日志 

kubectl logs my-pod
kubectl port-forward

用于转发来自各种 Pod 的端口,包括 Pod、服务、部署等

例如,要将本地计算机上的端口 8080 转发到 Pod 上的端口 80

kubectl port-forward my-pod 8080:80
 kubectl scale

用于扩展或缩减 Kubernetes 资源。它可用于缩放各种资源,包括部署、副本集

用于扩展或缩减 Kubernetes 资源。它可用于缩放各种资源,包括部署、副本集 

kubectl scale deployment my-deployment --replicas=5
 kubectl rollout

用于管理 Kubernetes 资源的推出。它可用于管理各种资源的推出,包括部署、副本集 

kubectl rollout status deployment/my-deployment
kubectl expose

用于将 Kubernetes 资源公开为服务。它可用于公开各种资源,包括 Pod、部署

例如,若要将部署公开为服务

kubectl expose deployment my-deployment --port=80 --target-port=8080
kubectl run

用于创建新的 Kubernetes 资源。它可用于创建各种资源,包括 Pod、deployment

kubectl run my-pod --image=my-image
kubectl config

用于管理 Kubernetes 配置。它可用于管理各种配置,包括上下文、群集 

例如,要查看当前上下文配置 

kubectl config current-context
 kubectl cluster-info

kubectl cluster-info 命令用于检索有关 Kubernetes 集群的信息。
它可用于检索各种信息,包括 API 服务器 URL、Kubernetes 版本

例如,要检索有关 Kubernetes 集群的信息 

kubectl cluster-info
kubectl apply -dry-run

kubectl apply --dry-run 命令用于模拟对 Kubernetes 资源更改的应用。它可用于模拟对各种资源(包括 Pod、服务、部署等)的更改。

kubectl apply -f deployment.yaml — dry-run
kubectl rollout undo

kubectl rollout undo 命令用于撤消 Kubernetes 资源的推出。它可用于撤消各种资源的推出,包括部署、副本集

kubectl rollout undo deployment/my-deployment
kubectl auth

kubectl auth 命令用于管理 Kubernetes 身份验证。它可用于管理各种身份验证设置,包括角色、角色绑定

kubectl auth can-i get pods —-as my-user

kubectl top

kubectl top 命令用于从 Kubernetes 资源中检索资源使用指标。它可用于从各种资源(包括节点、Pod 等)中检索指标

kubectl top pod my-pod
kubectl set

此命令用于更新或修改 Kubernetes 资源的状态。这是一个命令式命令,这意味着它直接指示 Kubernetes 执行操作,而不是声明所需的状态。

kubectl set image:此子命令用于更新部署或 Pod 使用的容器映像。
kubectl set env:此子命令用于更新 Pod 或部署的环境变量。
kubectl set resources:此子命令用于更新 Pod 或部署的资源请求和限制。
kubectl set replicas:此子命令用于更新部署的副本数。

kubectl set image deployment/my-deployment my-container=new-image:latest

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值