k8s之kudeadm

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

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

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

master:192.168.233.91 docker kubelet lubeadm kubectl flannel

node1:192.168.233.92 docker kubelet lubeadm kubectl flannel

node2:192.168.233.93 docker kubelet lubeadm kubectl flannel

harbor节点:192.168.233.94 docker docker-compose harbor

所有:

systemctl stop firewalld

setenforce 0

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

swapoff -a

前三台:master node1 node2

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

vim /etc/sysctl.d/k8s.conf

#开启网桥模式:

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

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

#网桥的流量传给iptables链,实现地址映射

#关闭ipv6的流量(可选项)

net.ipv6.conf.all.disable_ipv6=1

#根据工作中的实际情况,自定

net.ipv4.ip_forward=1

wq!

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

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

net.ipv6.conf.all.disable_ipv6=1

net.ipv4.ip_forward=1

sysctl --system

master1:

hostnamectl set-hostname master01

node1:

hostnamectl set-hostname node01

node2:

hostnamectl set-hostname node02

harror:

hostnamectl set-hostname

vim /etc/hosts

192.168.66.10 master01

192.168.66.20 node01

192.168.66.30 node02

192.168.66.40 harror

所有:

yum install ntpdate -y

ntpdate ntp.aliyun.com

date

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

systemctl start docker.service

systemctl enable docker.service

mkdir /etc/docker

cat > /etc/docker/daemon.json <<EOF

{

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

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

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

"log-opts": {

"max-size": "100m"

}

}

EOF

systemctl daemon-reload

systemctl restart docker

systemctl enable docker

master,node1,node2:

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

yum install -y kubelet-1.20.15 kubeadm-1.20.15 kubectl-1.20.15

master:

kubeadm config images list --kubernetes-version 1.20.15

pause:特殊的pod

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

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

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

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

kubeadm init \

--apiserver-advertise-address=192.168.66.10 \

--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

master01:

kubeadm init \

> --apiserver-advertise-address=192.168.66.10 \

> --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

一定要把这个复制:

node1,node2:

kubeadm join 192.168.66.10:6443 --token ub8djv.yk7umnodmp2h8yuh \

--discovery-token-ca-cert-hash sha256:d7b5bd1da9d595b72863423ebeeb9b48dff9a2a38446ac15348f1b1b18a273e9

master:

mkdir -p $HOME/.kube

cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

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

systemctl restart kubelet

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

搜索mode

systemctl restart kubelet

kubectl get node

kubectl get cs

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

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

systemctl restart kubelet

kubectl get cs

kubectl get pods -n kube-system

cd /opt

拖进去flannel,cni-plugins-linux-amd64-v0.8.6.tgz,kube-flannel.yml

docker load -i flannel.tar

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

两个从节点

拖flannel.tar ,cni-plugins-linux-amd64-v0.8.6.tgz

docker load -i flannel.tar

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

master:

kubectl apply -f kube-flannel.yml

kubectl get node

docker load -i flannel.tar

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

kubectl get node

kubectl get pods

kubectl get pods -o wide -n kube-system

cd /etc/kubernetes/pki

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

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

cd /opt

把update-kubeadm-cert.sh 拖进去

chmod 777 update-kubeadm-cert.sh

./update-kubeadm-cert.sh all

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

kubectl get nodes

kubectl get pods -n kube-system

kubectl get cs

vim /etc/profile

source <(kubectl completion bash)

wq!

source /etc/profile

kubectl describe pods

kubectl get pod -n kube-system

这时候master即使主也是一个node

验证:

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

kubectl get pods

kubectl get pods -o wide

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

kubectl get svc

curl 192.168.66.10:30923

harror:

cd /opt

把docker-compose 和harror拖进来

mv docker-compose-linux-x86_64 docker-compose

mv docker-compose /usr/local/bin

chmod 777 /usr/local/bin/docker-compose

docker-compose -v

tar -xf harbor-offline-installer-v2.8.1.tgz -C /usr/local

cd /usr/local/harbor/

cp harbor.yml.tmpl harbor.yml

vim /usr/local/harbor/harbor.yml

mkdir -p /data/cert

cd /data/cert

openssl genrsa -des3 -out server.key 2048

123456

123456

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

123456

Cn

JS

NJ

TEST

TEST

hub.kgc.com

admin@test.com

一路回车

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/*

cd /usr/local/harbor/

./prepare

./install.sh

https://192.168.66.40

admin

123456

node1::

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

k8s4:

scp -r /data/ root@192.168.66.20:/

scp -r /data/ root@192.168.66.30:/

node1:

cd /data/cert

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

vim /etc/hosts

192.168.66.40 hub.test.com

vim /lib/systemd/system/docker.service

--insecure-registry=hub.test.com

systemctl daemon-reload

systemctl restart docker

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

docker images

创建一个

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

docker images

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

node2:

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

cd /data/cert

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

vim /etc/hosts

192.168.66.40 hub.test.com

vim /lib/systemd/system/docker.service

--insecure-registry=hub.test.com

systemctl daemon-reload

systemctl restart docker

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

docker images

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

docker images

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

master1:

kubectl create deployment nginx1 --image=hub.test.com/library/nginx:v1 --port=80 --replicas=3

kubectl get pods

记得把k8s改成公开

master1:

cd /opt

拖进去 recommended.yaml

kubectl apply -f recommended.yaml

kubectl create serviceaccount dashboard-admin -n kube-system

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

kubectl get pods -n kubernetes-dashboard

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

访问 https://192.168.66.30:30001

相关推荐
彩虹糖_haha20 分钟前
Linux高并发服务器开发 第五天(压缩解压缩/vim编辑器/查找替换/分屏操作/vim的配置)
linux·运维·服务器
旺仔学IT20 分钟前
Centos7中使用yum命令时候报错 “Could not resolve host: mirrorlist.centos.org; 未知的错误“
linux·运维·centos
SRExianxian1 小时前
kubernetes存储架构之PV controller源码解读
容器·架构·kubernetes
qq_433618441 小时前
shell 编程(五)
linux·运维·服务器
VVVVWeiYee2 小时前
项目2路由交换
运维·服务器·网络·网络协议·信息与通信
lifeng43213 小时前
Jenkins集成部署(图文教程、超级详细)
运维·jenkins
白手小弟3 小时前
python wxauto库实现微信自动化发送信息、回复、添加好友等
运维·自动化
ii_best3 小时前
ios按键精灵自动化的脚本教程:自动点赞功能的实现
运维·ios·自动化
3DVisionary4 小时前
数字图像相关DIC技术用于机械臂自动化焊接全场变形测量
运维·数码相机·自动化·焊接变形实验·数字图像相关dic技术·自动化焊接全场变形测量·非接触高精度环境适应性全场测量
ether-lin4 小时前
DevOps实战:用Kubernetes和Argo打造自动化CI/CD流程(2)
kubernetes·自动化·devops