30min搭建kubernetes

master and node 操作如下

yum源修改

1// 备份本地yum源 2mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak 3 4// 获取阿里yum源配置 5wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 6// 或者 7curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 8 9// 更新catch 10yum clean all # 清除系统所有的yum缓存 11yum makecache # 生成yum缓存 12 13// 查看 14yum -y update 15 16// 调整时区为上海 17timedatectl set-timezone Asia/Shanghai

升级内核为 4.4.4 版本

1获取源 2rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm 3 4安装,装完成后检查 /boot/grub2/grub.cfg中对应内核menuentry中是否包含 initrd16 配置,如果没有,再安装一次! 5yum --enablerepo=elrepo-kernel install -y kernel-lt 6 7查看系统的全部内核 8sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg 90 : CentOS Linux (4.4.234-1.el7.elrepo.x86_64) 7 (Core) 101 : CentOS Linux (3.10.0-1127.19.1.el7.x86_64) 7 (Core) 112 : CentOS Linux (3.10.0-1127.el7.x86_64) 7 (Core) 123 : CentOS Linux (0-rescue-a3c527d56cc044c1887c29a15fe92891) 7 (Core) 13 14 15设置开机从新内核启动 16grub2-set-default 0 17生成grub配置文件 18grub2-mkconfig -o /boot/grub2/grub.cfg 19重启使配置有效 20reboot 21 22查看正在使用的内核 23uname -r

使用本地软件包管理软件安装 kubectl 二进制文件

1cat <<EOF > /etc/yum.repos.d/kubernetes.repo 2[kubernetes] 3name=Kubernetes 4baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ 5enabled=1 6gpgcheck=1 7repo_gpgcheck=1 8gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg 9EOF
1开始安装 kubelet kubeadm kubectl 2$ yum install -y kubelet kubeadm kubectl 3 4设置开机启动 5$ systemctl enable kubelet && systemctl start kubelet 6 7设置路由策略 8lsmod | grep br_netfilter 9使桥接流量对iptables可见 10cat <<EOF > /etc/sysctl.d/k8s.conf 11net.bridge.bridge-nf-call-ip6tables = 1 12net.bridge.bridge-nf-call-iptables = 1 13EOF 14sysctl --system 15 16关闭swap 17sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab 18swapoff -a 19 20验证是否生效,均返回 1 即正确 21sysctl -n net.bridge.bridge-nf-call-iptables 22sysctl -n net.bridge.bridge-nf-call-ip6tables 23 24echo "1" >/proc/sys/net/ipv4/ip_forward 25

关闭防火墙

1systemctl stop firewalld.service #停止firewall 2systemctl disable firewalld.service #禁止firewall开机启动 3firewall-cmd --state #查看防火墙状态

禁用SELINUX

1setenforce 0 2vi /etc/selinux/config 3#SELINUX修改为disabled 4SELINUX=disabled

安装 docker-ce,国内阿里仓库安装

安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。

1yum install -y yum-utils \ 2 device-mapper-persistent-data \ 3 lvm2 4 5yum-config-manager \ 6 --add-repo \ 7 http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装最新版本的 Docker Engine-Community 和 containerd

1yum install docker-ce docker-ce-cli containerd.io 2 3将普通用户可以执行docker命令 4 5创建docker 用户组 6sudo groupadd docker 7 8普通用户加入docker用户组 9sudo usermod -aG docker ${USER} 10启动docker 11sudo systemctl restart docker 12 13## Create /etc/docker 14mkdir /etc/docker 15# Set up the Docker daemon 16cat > /etc/docker/daemon.json <<EOF 17{ 18 "exec-opts": ["native.cgroupdriver=systemd"], 19 "log-driver": "json-file", 20 "log-opts": { 21 "max-size": "100m" 22 }, 23 "storage-driver": "overlay2", 24 "storage-opts": [ 25 "overlay2.override_kernel_check=true" 26 ] 27} 28EOF 29 30 31mkdir -p /etc/systemd/system/docker.service.d 32 33 34# Restart Docker 35systemctl daemon-reload 36systemctl restart docker 37 38# 开机启动docker 39systemctl enable docker 40

查看kubeadm、kubectl、cubelet 版本命令

1[root@master ~]# kubeadm version 2kubeadm version: &version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.0", GitCommit:"af46c47ce925f4c4ad5cc8d1fca46c7b77d13b38", GitTreeState:"clean", BuildDate:"2020-12-08T17:57:36Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"} 3 4[root@master ~]# kubectl version --client 5Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.0", GitCommit:"af46c47ce925f4c4ad5cc8d1fca46c7b77d13b38", GitTreeState:"clean", BuildDate:"2020-12-08T17:59:43Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"} 6 7[root@master ~]# kubelet --version 8Kubernetes v1.20.0

master 节点初始化集群

1[root@master ~]# kubeadm init --kubernetes-version=1.18.2 \ 2--apiserver-advertise-address=192.168.1.12 \ 3--ignore-preflight-errors=all \ 4--image-repository registry.aliyuncs.com/google_containers \ 5--service-cidr=10.1.0.0/16 \ 6--pod-network-cidr=10.244.0.0/16 7

POD的网段为: 10.122.0.0/16, api server地址就是master本机IP。

这一步很关键,由于kubeadm 默认从官网k8s.grc.io下载所需镜像,国内无法访问,因此需要通过–image-repository指定阿里云镜像仓库地址。

参数解释:

1–kubernetes-version: 用于指定k8s版本; 2–apiserver-advertise-address:用于指定kube-apiserver监听的ip地址,就是 master本机IP地址。 3–pod-network-cidr:用于指定Pod的网络范围; 10.244.0.0/16 4–service-cidr:用于指定SVC的网络范围; 5–image-repository: 指定阿里云镜像仓库地址

执行以下命令

1[root@master ~]# mkdir -p $HOME/.kube 2[root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 3[root@master ~]# chown $(id -u):$(id -g) $HOME/.kube/config

使kubectl自动补全

1source <(kubectl completion bash) 2运行kubectl tab时出现以下报错 3 4[root@master bin]# kubectl c-bash: _get_comp_words_by_ref: command not found 5loud-controller-man^C 6 7解决方法: 81.安装bash-completion 9[root@master bin]# yum install bash-completion -y 10 112.执行bash_completion 12[root@master bin]# source /usr/share/bash-completion/bash_completion 13 143.重新加载kubectl completion 15[root@master bin]# source <(kubectl completion bash) 16 174.用tab就OK18[root@master bin]# kkubectl get pod --all-namespaces -o wide

查看节点

kubectl get pod --all-namespaces -o wide

添加网络

1kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml 2 3或者 4 5kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

worker 节点添加到集群中

1生成加入集群命令 2kubeadm token create --print-join-command 3 4kubeadm join 192.168.253.11:6443 --token zz2iu9.ta51l53ajgai8rhx --discovery-token-ca-cert-hash sha256:e49bc0b32bd1f8ebdd8420bf5f29c4d8ab8b0f4abc21d0e9612b57cb8b0c41a8

部署 dashbord 界面

下载 dashbord.yaml 文件到本地,可以在github上查看想要的版本,例如 2.0.0 地址如下

1部署 2wget -O dashbord.yaml https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml 3kubectl create -f dashbord.yaml 4kubectl proxy

可以通过以下方式查看界面

https://github.com/kubernetes/dashboard/blob/master/docs/user/accessing-dashboard/README.md

如果是虚拟机做实验,可以把dashbord端口暴露给node,然后浏览器在访问,如下

设置可以在外部访问dashboard,修改 dashboard以 nodePort 访问,编辑配置文件

1kubectl -n kubernetes-dashboard edit service kubernetes-dashboard 2修改类型 3type: ClusterIP 4改为 5type: NodePort 6 7查看暴露端口 8[root@master ~]# kubectl -n kubernetes-dashboard get service kubernetes-dashboard 9NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE 10kubernetes-dashboard NodePort 10.1.228.144 <none> 443:30657/TCP 51m 11 12此时可以通过31481端口访问 13https://192.168.1.12:30657/#/login

查看dashboard.yaml 文件找到 , 表示创建了 kubernetes-dashbord 账户

为该账户创建登录 token

1创建简单用户 2这里需要创建一个简单的管理用户,通过这个用户来获得到token,来访问dashboard页面。 3 4文件 dashboard-adminuser.yaml 5 6apiVersion: v1 7kind: ServiceAccount 8metadata: 9 name: admin-user 10 namespace: kubernetes-dashboard 11 12运行如下命令: 13 14kubectl apply -f dashboard-adminuser.yaml 15serviceaccount/admin-user created 16 17文件 dashboard-cluster-role-binding.yaml 18 19apiVersion: rbac.authorization.k8s.io/v1 20kind: ClusterRoleBinding 21metadata: 22 name: admin-user 23roleRef: 24 apiGroup: rbac.authorization.k8s.io 25 kind: ClusterRole 26 name: cluster-admin 27subjects: 28- kind: ServiceAccount 29 name: admin-user 30 namespace: kubernetes-dashboard 31 32运行如下命令: 33 34kubectl apply -f dashboard-cluster-role-binding.yaml 35clusterrolebinding.rbac.authorization.k8s.io/admin-user created 36 37获得Token 38kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}') 39 40

此时将 token 复制到 dashbord 登录页 token 输入框

卸载kubenetes集群

1kubectl delete node --all 2kubeadm reset -f 3modprobe -r ipip 4lsmod 5rm -rf ~/.kube/ 6rm -rf /etc/kubernetes/ 7rm -rf /etc/systemd/system/kubelet.service.d 8rm -rf /etc/systemd/system/kubelet.service 9rm -rf /usr/bin/kube* 10rm -rf /etc/cni 11rm -rf /opt/cni 12rm -rf /var/lib/etcd 13rm -rf /var/etcd 14yum clean all 15yum remove kube*

常见问题:

加入集群时报错: /etc/kubernetes/kubelet.conf already exists

原因: 上次的配置文件没有清理干净,删除即可

rm -rf /etc/kubernetes/kubelet.conf /etc/kubernetes/pki/ca.crt

加入集群时报错: [ERROR Port-10250]: Port 10250 is in use

原因:上次加入没有成功就关闭。重置kubeadm

kubeadm reset

加入集群报错:/proc/sys/net/ipv4/ip_forward contents are not set to 1

echo "1" >/proc/sys/net/ipv4/ip_forward

K8s kubectl error:c-bash: _get_comp_words_by_ref: command not found

1source <(kubectl completion bash) 2运行kubectl tab时出现以下报错 3 4[root@master bin]# kubectl c-bash: _get_comp_words_by_ref: command not found 5loud-controller-man^C 6 7解决方法: 81.安装bash-completion 9[root@master bin]# yum install bash-completion -y 10 112.执行bash_completion 12[root@master bin]# source /usr/share/bash-completion/bash_completion 13 143.重新加载kubectl completion 15[root@master bin]# source <(kubectl completion bash) 16 174.用tab就OK18[root@master bin]# kkubectl get pod --all-namespaces -o wide
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

mySQL的安装过程

安装mysql源码包安装优化基础源root@db03~vim/etc/yum.repos.d/CentOSBase.repo安装依赖包root@db03~yuminstallycmakencursesdevelautocon

CentOS 7 yum nginx MySQL PHP 简易环境搭建

用centos自带的yum源来安装nginx,mysql和php,超级方便,省去编译的麻烦,省去自己配置的麻烦,还能节省非常多的时间。我们先把yum源换成国内的阿里云镜像源(当然不换也可以),先备份一下原来的源镜像文件,以免出错后可以恢复:\root@192~\mv/etc/yum.repos.d/CentOSBase.repo/et

KVM调整cpu和内存

一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid