声明:此文章为博主个人学习记录,仅供学习和交流,如有侵权请联系博主。

kubernetes本地集群部署

三种方式

minikube 集群模拟器
裸机
kind

minikube

Docker客户端部署

在这里插入图片描述

裸机

环境

虚拟机 VMware

三台centos7
每台2g内存 2cpu 30g硬盘
k8s-master 192.168.60.120
k8s-node1 192.168.60.121
k8s-node2 192.168.60.122

以下没做说明,都是对三台机器同时操作

安装最新内核版本
#查看系统版本
cat /etc/redhat-release
#查看当前系统的内核:
uname -sr
#在 CentOS 7.x 上启用 ELRepo 仓库:
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm

#查看可用的系统内核相关包:
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

#安装最新主线内核版本:
yum -y --enablerepo=elrepo-kernel install kernel-ml

#设置默认内核版本
vi /etc/default/grub
修改GRUB_DEFAULT=0

#重新创建内核配置
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot
设置主机名
#命令:hostnamectl set-hostname <hostname>
#示例:
# 192.168.60.120(在主节点执行)
hostnamectl set-hostname k8s-master

# 192.168.60.121(在node1节点执行)
hostnamectl set-hostname k8s-node1

# 192.168.60.122(在node2节点执行)
hostnamectl set-hostname k8s-node2

#主机名解析
cat >> /etc/hosts << EOF
127.0.0.1   $(hostname)
192.168.60.120 k8s-master
192.168.60.121 k8s-node1
192.168.60.122 k8s-node2
EOF
时间同步
yum install ntpdate -y
ntpdate time.windows.com
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
关闭selinux
#查看 selinux 是否开启
getenforce

#实验环境下选择永久关闭。
#1.永久关闭 SELinux ,需要重启机器生效:
sed -i 's/enforcing/disabled/' /etc/selinux/config
reboot
#2.临时关闭当前会话的 SELinux ,机器重启之后无效:
setenforce 0
关闭swap分区
#永久关闭 swap ,需要重启机器生效:
sed -ri 's/.*swap.*/#&/' /etc/fstab
reboot
#拓展:临时关闭当前会话的 swap ,机器重启之后无效:
swapoff -a
将桥接的IPv4流量传递到iptables链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF

# 加载br_netfilter模块
modprobe br_netfilter

# 查看是否加载
lsmod | grep br_netfilter

# 使生效
sysctl --system

#拓展:持久化修改(保留配置包本地文件,重启系统或服务进程仍然有效)
sysctl -p

开启 ipvs
yum -y install ipset ipvsadm

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF

# 授权、运行、检查是否加载:
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
reboot
容器化环境和组件安装

参照上一篇Docker容器化

安装kubeadm、kubelet和kubectl
yum install -y kubelet-1.21.10 kubeadm-1.21.10 kubectl-1.21.10
kubelet --version

vi /etc/sysconfig/kubelet

# 修改为
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

systemctl enable kubelet

kubernetes集群部署
kubeadm config images list

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.21.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.21.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.21.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.21.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.4.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.0

docker images
部署 Kubernetes 的 Master 节点

master机器

kubeadm init \
  --apiserver-advertise-address=192.168.60.120 \
  --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \
  --kubernetes-version=v1.21.10 \
  --service-cidr=10.96.0.0/16 \
  --pod-network-cidr=10.244.0.0/16
  
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

# 如果是 root 用户,还可以执行如下命令
export KUBECONFIG=/etc/kubernetes/admin.conf

#生成token,有效期2小时
kubeadm token create --print-join-command

# 生成一个永不过期的token 保留这个token
kubeadm token create --ttl 0 --print-join-command

# node加入集群
根据上面的命令,让node机器加入集群
部署网络插件

master机器

kubectl apply -f https://projectcalico.docs.tigera.io/v3.19/manifests/calico.yaml

#查看部署 CNI 网络插件进度
kubectl get pods -n kube-system 或者 watch kubectl get pods -n kube-system
设置 kube-proxy 的 ipvs 模式

master机器

kubectl edit cm kube-proxy -n kube-system

#####
找到ipvs模块,将 mode: " " 双引号里面加上ipvs
#####

#删除 kube-proxy ,让 Kubernetes 集群自动创建新的 kube-proxy
kubectl delete pod -l k8s-app=kube-proxy -n kube-system

配置Node节点也能使用 kubectl 命令
#两个节点机器上
mkdir -pv ~/.kube
touch ~/.kube/config

#master上,注意节点主机名字root@k8s-node1
scp /etc/kubernetes/admin.conf root@k8s-node1:~/.kube/config
scp /etc/kubernetes/admin.conf root@k8s-node2:~/.kube/config

在Kubernetes集群中部署nginx1.14,测试下集群是否正常工作

master机器

  • 部署Nginx

  • kubectl create deployment nginx --image=nginx:1.14-alpine
    
  • 暴露端口

  • kubectl expose deployment nginx --port=80 --type=NodePort
    
  • 查看服务状态

  • kubectl get pods,svc
    
自动补全
# 安装bash
yum -y install bash-completion
# 自动补全 
echo 'source <(kubectl completion bash)' >>~/.bashrc 
kubectl completion bash >/etc/bash_completion.d/kubectl
# 全局
kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl > /dev/null
source /usr/share/bash-completion/bash_completion

插件addons
安装K8s-Dashboard

master机器

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yaml

#构建 Pod
kubectl apply -f recommended.yaml

#查看 Pod 状态
kubectl get pods --all-namespaces | grep dashboard

#查看所有命名空间namespace
kubectl get svc --all-namespaces

#删除现有dashboard服务
kubectl delete service kubernetes-dashboard --namespace=kubernetes-dashboard

#登录dashboard
cd /etc/kubernetes
vi /etc/kubernetes/dashboard-svc.yaml

#######
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort
  ports:
    - port: 443
      targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard
######

#创建kubernetes-dashboard的 Service服务
kubectl apply -f dashboard-svc.yaml

#查看namespace
kubectl get svc --all-namespaces

#创建 kubernetes-dashboard 管理员角色,在/etc/kubernetes 目录下创建配置文件dashboard-svc-account.yaml
######
apiVersion: v1
kind: ServiceAccount
metadata:
  name: dashboard-admin
  namespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: dashboard-admin
subjects:
  - kind: ServiceAccount
    name: dashboard-admin
    namespace: kube-system
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
########

kubectl apply -f dashboard-svc-account.yaml

#获取 token,先查找token文件
kubectl get secret -n kube-system |grep admin|awk '{print $1}'

#系统返回dashboard-admin-token-d4cll,查看token
kubectl describe secret dashboard-admin-token-d4cll -n kube-system|grep '^token'|awk '{print $2}'

#得到了dashboard的token,先复制保存一份
#########
your_token
#########

#查看外部访问端口,也就是之前我们创建的 Service 31519
kubectl get svc --all-namespaces | grep dashboard

#在浏览器访问dashboard,网址输入【集群IP:端口号】如:https://192.168.79.102:31519/可以访问web管理界面 用火狐浏览器
#输入之前生成的token登录dashboard

在这里插入图片描述

kind部署

curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.18.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind

k8s常用命令

#部署yaml文件:
kubectl apply -f xxx.yaml

#获取节点和服务版本信息,并查看附加信息
kubectl get nodes -o wide

#获取pod信息,默认是default名称空间
kubectl get pod

#获取pod信息,默认是default名称空间,并查看附加信息
#kubectl get pod -o wide

#获取指定名称空间的pod
kubectl get pod -n kube-system

#获取指定名称空间中的指定pod
kubectl get pod -n kube-system podName

#获取所有名称空间的pod
kubectl get pod -A

#查看所有名称空间的service信息
kubectl get svc -A

#查看componentstatuses信息
kubectl get cs

#查看所有deployments信息
kubectl get deploy -A

#查看所有replicasets信息
kubectl get rs -A

#查看所有statefulsets信息
kubectl get sts -A

#查看所有jobs信息
kubectl get jobs -A

扩展

VMware Centos7静态ip设置

备注:本机是windows环境

第一步 配置VMware
打开VMware 左上角打开编辑 右下角更改设置 选择VMware8 取消勾选dhcp 打开NAT设置 记住网关ip(可以自己更改)!!!

在这里插入图片描述

第二步 配置本机windows
打开windows网络和Internet设置 选择更改适配器选项 选择VMnet8并右击选择属性 点击Internet协议版本4 按如下图配置(按自己配置的网关ip)

在这里插入图片描述

第三步 centos7虚拟机ip配置

cd /etc/sysconfig/network-scripts/

ls
找到ifcfg-ens33(也有可能不是ens33,是ens结尾的,按情况来),进去vim

vim ifcfg-ens33

#################
BOOTPROTO=static	
ONBOOT=yes
IPADDR=192.168.60.随便
GATEWAY=your_gateway
NETMASK=255.255.255.0
DNS1=your_gateway
#################

service network restart

# 检查是否配好
ping www.baidu.com
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐