k8s

k8s集群搭建

1、节点

节点 IP
master 192.168.124.100
node1 192.168.124.101
node2 192.168.124.102
node3 192.168.124.103

2、docker安装

安装使用官方源,安装命令如下:

1
2
3
4
5
6
7
8
# 下载仓库
cd /etc/yum.repos.d
wget https://download.docker.com/linux/centos/docker-ce.repo
yum makecache fast
# 安装docker
yum install docker-ce docker-ce-cli containerd.io
# 启动docker
systemctl enable docker && systemctl start docker

3、kubernetes安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# 所有节点执行
# 添加仓库
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[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

# 更新yum cache
yum makecache fast

# kubeadm初始化会报错, 需要执行下列命令
# 1、关闭firewalld
systemctl diable firewalld && systemctl stop firewalld

# 2、关闭selinux
setenforce 0 && sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

# 3、关闭swap
swapoff -a && sed -i '/ swap / s/^/#/' /etc/fstab

# 4、设置网络
touch /etc/sysctl.d/k8s.conf

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
EOF

modprobe br_netfilter && sysctl -p /etc/sysctl.d/k8s.conf

# master节点执行
yum install kubeadm kubectl kubelet

# 所有node节点执行
yum install kubeadm kubelet

# 启动实际运行容器的服务kubelet
systemctl enable kubelet && systemctl start kubelet

# 现在执行kubelet会报错,不用管
# kubeadm init或join之后,systemd会自动拉起kubelet
# kubeadm是集群管理工具
# kubelet负责运行pods
# kubectl是客户端,负责和kube-apiserver通信
# 用类比解释的话,kubectl是curl,kube-apiserver是服务器
# kube-controller-manager是控制器
# kube-scheduler是调度器
# kube-proxy负责网络通信
# pause是pod空闲运行的镜像
# etcd用于分布式存储集群信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 由于kubeadm使用镜像拉起k8s,但是被墙了,所以在可以翻墙的主机上下载镜像,然后使用下列命令导出镜像
# docker save -o package.tar.gz image1:latest
# 使用下面命令导入镜像
# docker load -i package.tar.gz

# 获取需要下载的镜像列表
kubeadm config images list

# 输出如下,master表示在主节点安装,node表示在从节点安装
k8s.gcr.io/kube-apiserver:v1.16.1 # master
k8s.gcr.io/kube-controller-manager:v1.16.1 # master
k8s.gcr.io/kube-scheduler:v1.16.1 # master
k8s.gcr.io/kube-proxy:v1.16.1 # master node
k8s.gcr.io/pause:3.1 # node
k8s.gcr.io/etcd:3.3.15-0 # master
k8s.gcr.io/coredns:1.6.2 # master node

# 很不幸,被墙了
# 用可以翻墙的主机用docker pull拉取镜像,上传本地即可
# 镜像的打包使用save命令
# 镜像的导入使用load命令

# 下载好镜像,导入完毕
# 在master节点执行
kubeadm init --kubernetes-version=v1.16.1 --apiserver-advertise-address=192.168.124.100 --pod-network-cidr=10.244.0.0/16
1
2
3
4
5
6
7
8
# 执行成功后,会提示进行如下操作
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 节点加入集群操作
kubeadm join 192.168.124.100:6443 --token ba04v7.y9ki5jgbss8gs0jx \
--discovery-token-ca-cert-hash sha256:8404de0f262daf02de05aad96415c79c2ff39b91ce3ee28cd8248426166123a9
1
2
3
4
5
6
# k8s的网络模型是扁平化的,即pod之间需要能够直接访问,在谷歌的实现中,已经支持扁平化网络模型
# 但是我们创建的集群,不满足这种网络模型,所以需要借助插件或者进行主机配置之后才能满足
# 刚开始学习建议使用flannel,减少障碍,后期有需要进行调研学习

# 安装flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
1
2
3
4
5
6
7
8
9
10
11
12
# 在master执行
kubectl get nodes

# 输出,暂时配置了两个节点
NAME STATUS ROLES AGE VERSION
master Ready master 50m v1.16.1
node1 Ready <none> 27m v1.16.1

# 没有安装flannel之前,查看nodes,会提示STATUS为NotReady。
# 至此,k8s的基本安装就结束了。
# 是不是很简单
# 后续会继续分享k8s的学习
分享到