kubeadm

kubeadm 

kubeadm来快速的搭建一个k8s集群

二进制搭建适合大集群,50台以上主机

kubeadm更适合中下企业的业务集群

master:192.168.233.91  2核4G    4核8G  docker  kubelet  kubeadm  kubectl  flannel

node1:192.168.233.92   2核4G    4核8G  docker  kubelet  kubeadm  kubectl  flannel

node2:192.168.233.93  2核4G    4核8G   docker  kubelet  kubeadm  kubectl  flannel

Harbor节点:192.168.233.94  2核4G    docker  docker-compose  harbor

91、92、93、94同步操作:

systemctl stop firewalld

setenforce 0

iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

交换分区必须要关闭

swapoff -a

三台机器改名字

hostnamectl set-hostname master01

hostnamectl set-hostname node01

hostnamectl set-hostname node02

91、92、93:

加载 ip_vs 模块

for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done

kubeadm_第1张图片

91、92、93同步操作:所有节点修改hosts文件

vim /etc/hosts

192.168.233.91 master01

192.168.233.92 node01

192.168.233.93 node02

kubeadm_第2张图片

调整内核参数

cat > /etc/sysctl.d/kubernetes.conf << EOF

#开启网桥模式,可将网桥的流量传递给iptables链

net.bridge.bridge-nf-call-ip6tables=1

net.bridge.bridge-nf-call-iptables=1

#关闭ipv6协议

net.ipv6.conf.all.disable_ipv6=1

net.ipv4.ip_forward=1

EOF

kubeadm_第3张图片

生效参数

sysctl --system

kubeadm_第4张图片

四台机器:

所有节点安装docker

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install -y docker-ce docker-ce-cli containerd.io

安装时间同步

yum install ntpdate -y

ntpdate ntp.aliyun.com

date

mkdir /etc/docker

cat > /etc/docker/daemon.json <

{

  "registry-mirrors": ["https://pkm63jfy.mirror.aliyuncs.com"],

  "exec-opts": ["native.cgroupdriver=systemd"],

  "log-driver": "json-file",

  "log-opts": {

    "max-size": "100m"

  }

}

EOF

kubeadm_第5张图片

systemctl daemon-reload

systemctl restart docker.service

systemctl enable docker.service

91、92、93:

三个节点安装kubeadm,kubelet和kubectl  

//定义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=0

repo_gpgcheck=0

gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

EOF

kubeadm_第6张图片

yum install -y kubelet-1.20.15 kubeadm-1.20.15

91:

查看初始化需要的镜像

kubeadm config images list --kubernetes-version 1.20.15

kubeadm_第7张图片

pause:特殊的pod

pause会在节点上创建一个网络命名空间,其他容器可以加入这个网络命名空间

pod里面的容器可以使用不同的代码和架构编写。可以在一个网络空间里面实现通信,协调这个命名空间里面的资源(实现pod内容器的兼容性)

kubeadm安装的k8s组件都是以pod的形式运行在kube-system这个命名空间当中

kubelet node管理器可以进行系统控制

kubeadm init \

--apiserver-advertise-address=192.168.233.91 \

--image-repository registry.aliyuncs.com/google_containers \

--kubernetes-version=v1.20.15 \

--service-cidr=10.96.0.0/16 \

--pod-network-cidr=10.244.0.0/16 \

--token-ttl=0

kubeadm_第8张图片

然后把kubeadm的这条命令复制出来放到两个node节点,92和93

92、93:

91:

设定kubectl

kubectl需经由API server认证及授权后方能执行相应的管理操作,

kubeadm 部署的集群为其生成了一个具有管理员权限的认证配置文件

/etc/kubernetes/admin.conf,

它可由 kubectl 通过默认的 “$HOME/.kube/config” 的路径进行加载。

mkdir -p $HOME/.kube

cd /etc/kubernetes/

cp admin.conf /root/.kube/config

cd /root/.kube/

chown $(id -u):$(id -g) $HOME/.kube/config

systemctl restart kubelet.service

初始化后需要修改 kube-proxy 的 configmap,开启 ipvs

kubectl edit cm kube-proxy -n=kube-system

修改mode: ipvs

kubeadm_第9张图片

systemctl restart kubelet

vim /etc/kubernetes/manifests/kube-controller-manager.yaml

kubeadm_第10张图片

kubeadm_第11张图片

kubeadm_第12张图片

kubeadm_第13张图片

vim /etc/kubernetes/manifests/kube-scheduler.yaml

kubeadm_第14张图片

kubeadm_第15张图片

kubeadm_第16张图片

systemctl restart kubelet

kubeadm_第17张图片

kubeadm_第18张图片

拖软件包

92、93:

拖软件包

docker load -i flannel.tar

kubeadm_第19张图片

mv /opt/cni /opt/cni_bak

mkdir -p /opt/cni/bin

tar zxvf cni-plugins-linux-amd64-v0.8.6.tgz -C /opt/cni/bin

kubeadm_第20张图片

91:

kubeadm_第21张图片

如果不想要master就删除 kubectl delete node master01

如果想要就在master01上操作

kubeadm_第22张图片

kubectl apply -f kube-flannel.yml

kubeadm_第23张图片

查看证书有效期

cd /etc/kubernetes/pki/

openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -text | grep Not

kubeadm_第24张图片

 openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text | grep Not

拖配置文件的包进来

kubeadm_第25张图片

赋权

chmod 777 update-kubeadm-cert.sh

./update-kubeadm-cert.sh all

openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text | grep Not

kubeadm_第26张图片

自动补齐

vim /etc/profile

在最后一行添加

source <(kubectl completion bash)

source /etc/profile

创建一个名为nginx的部署

kubectl create deployment nginx --image=nginx --replicas=3

kubeadm_第27张图片

获取当前命名空间中的所有 Pod 的详细信息

kubectl get pods -o wide

kubeadm_第28张图片

对外提供访问:

暴露端口提供服务

kubectl expose deployment nginx --port=80 --type=NodePort

kubectl get svc

测试访问

curl master地址加上上面svc命令的端口号

kubeadm_第29张图片

部署自己的镜像仓库:

94:

拖软件包和配置文件

mv docker-compose-linux-x86_64 docker-compose

chmod 777 docker-compose

mv docker-compose /usr/local/bin/

tar zxvf harbor-offline-installer-v2.8.1.tgz

cd harbor/

cp harbor.yml.tmpl harbor.yml

vim harbor.yml

kubeadm_第30张图片

kubeadm_第31张图片

kubeadm_第32张图片

生成证书

mkdir -p /data/cert

kubeadm_第33张图片

cd /data/cert

生成私钥

openssl genrsa -des3 -out server.key 2048

输入两遍密码:123456

openssl genrsa: 用于生成 RSA 密钥。

-des3: 使用 Triple DES 加密算法对生成的私钥进行加密。

-out server.key: 指定生成的私钥文件的名称为 server.key。

2048: 指定 RSA 密钥的位数为 2048 位。

生成证书签名请求文件

openssl req -new -key server.key -out server.csr

输入私钥密码:123456

输入国家名:CN

输入省名:BJ

输入市名:BJ

输入组织名:TEST

输入机构名:TEST

输入域名:hub.kgc.com

输入管理员邮箱:[email protected]

其它全部直接回车

kubeadm_第34张图片

备份私钥

cp server.key server.key.org

清除私钥密码

openssl rsa -in server.key.org -out server.key

输入私钥密码:123456

签名证书

openssl x509 -req -days 1000 -in server.csr -signkey server.key -out server.crt

chmod +x /data/cert/*

kubeadm_第35张图片

cd /opt/harbor/

./prepare

kubeadm_第36张图片

./install.sh

页面访问,在浏览器

账户:admin

密码:123456

92:

mkdir -p /etc/docker/certs.d/hub.test.com/

在harbor节点把密钥验证目录整个转给node节点:

cd /

scp -r data/ [email protected]:/

scp -r data/ [email protected]3:/

kubeadm_第37张图片

还有93也要传

92:

cd /

cd data/

cd cert/

cp server.crt server.csr server.key /etc/docker/certs.d/hub.test.com/

kubeadm_第38张图片

vim /etc/hosts

192.168.233.34 hub.test.com

kubeadm_第39张图片

vim /lib/systemd/system/docker.service

--insecure-registry=hub.test.com

kubeadm_第40张图片

systemctl daemon-reload

systemctl restart docker

docker login -u admin -p 123456 https://hub.test.com

kubeadm_第41张图片

docker images

kubeadm_第42张图片

docker tag nginx:latest hub.test.com/k8s/nginx:v1

docker images

kubeadm_第43张图片

上传镜像

docker push hub.test.com/k8s/nginx:v1

docker push然后用images的那个镜像加上:v1

kubeadm_第44张图片

然后在浏览器点进k8s查看

部署 Dashboard

Dashboard:仪表盘,kubernetes的可视化界面,在这个可视化界面上,可以对k8s集群进行管理

91:

在 master01 节点上操作

#上传 recommended.yaml 文件到 /opt/目录中

kubectl apply -f recommended.yaml

创建service account并绑定默认cluster-admin管理员集群角色

kubectl create serviceaccount dashboard-admin -n kube-system

kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

获取token值

kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

kubeadm_第45张图片

然后用浏览器登录 (有的浏览器用不了)

点击高级

kubeadm_第46张图片

kubeadm_第47张图片

这一步的密码就是上面几步中获取token值的密码

kubeadm_第48张图片

kubeadm_第49张图片

进入到这里算完成创建

kubeadm_第50张图片

你可能感兴趣的:(kubernetes,运维,容器)