keberadm 安装k8s
1. 服务器系统相关设置 (所有节点均需要操作)1.1 设置hostername192.168.10.11 master192.168.10.12 node1192.168.10.13 node2实现代码:vi /etc/hostname# 设定节点名称vi /etc/hosts# 设定节点ip对应关系分别在192.168.73.138、192.168.73.139、192.168.73.140上
1. 服务器系统相关设置 (所有节点均需要操作)
1.1 设置hostername
192.168.10.11 master
192.168.10.12 node1
192.168.10.13 node2
实现代码:
vi /etc/hostname # 设定节点名称
vi /etc/hosts # 设定节点ip对应关系
分别在192.168.73.138、192.168.73.139、192.168.73.140上设置主机名及配置hosts
$ hostnamectl set-hostname k8s-master(192.168.73.138主机打命令)
$ hostnamectl set-hostname k8s-node01(192.168.73.139主机打命令)
$ hostnamectl set-hostname k8s-node02 (192.168.73.140主机打命令)
1.2 关闭防火墙,swap,设置内核等
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld
1.3关闭sqap
$ swapoff -a # 临时
$ sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab #永久
1.4 修改下面内核参数,否则请求数据经过iptables的路由可能有问题
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
2. 安装kuberadm(所有节点都要操作)
2.1 将Kubernetes安装源改为阿里云,方便国内网络环境安装
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
2.2 安装kubelet kubeadm kubectl
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet
systemctl start kubelet
3.部署k8s
3.1部署集群(master节点操作)
kubeadm init \
--apiserver-advertise-address=192.168.10.11 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.16.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
请耐心等1-2分钟直到结束
补充:
kubernetes-version 后面的值通过 kubelet --version 查看
参数介绍:
–apiserver-bind-port int32 Default: 6443 可以通过这个参数指定API-server的工作端口,默认是6443。
–config string 可以通过这个命令传入kubeadm的配置文件,需要注意的是,这个参数是实验性质的,不推荐使用。
–dry-run 带了这个参数后,运行命令将会把kubeadm做的事情输出到标准输出,但是不会实际部署任何东西。强烈推荐!
-h, --help 输出帮助文档。
–node-name string 指定当前节点的名称。
–pod-network-cidr string 通过这个值来设定pod网络的IP地址网段;设置了这个值以后,控制平面会自动给每个节点设置CIDRs(无类别域间路由,Classless Inter-Domain Routing)。
–service-cidr string Default: “10.96.0.0/12” 设置service的CIDRs,默认为 10.96.0.0/12。
–service-dns-domain string Default: “cluster.local” 设置域名称后缀,默认为cluster.local。
其他参数。
运行结果:
kubeadm-init的工作流
在运行了 kubeadm init 命令以后,都进行了那些操作呢?这里主要就是跟着官方文档来翻译一遍了:
首先会运行一系列预检代码来检查系统的状态;大部分的检查只会抛出一个警告,也有一部分会抛出异常错误从而导致工作流推出(比如没有关闭swap或者没有安装docker)。官方给出一个参数–ignore-preflight-errors=, 我估计八成大家用不到,除非真的明白自己在做啥。。。
生成一个用来认证k8s组件间调用的自签名的CA(Certificate Authority,证书授权);这个证书也可以通过–cert-dir(默认是/etc/kubernetets/pki)的方式传入,那么这一步就会跳过。
把kubelet、controller-manager和scheduler等组件的配置文件写到/etc/kubernets/目录,这几个组件会使用这些配置文件来连接API-server的服务;除了上面几个配置文件,还会生成一个管理相关的admin.conf文件。
如果参数中包含–feature-gates=DynamicKubeletConfig,会把kubelet的初始化配置文件写入/var/lib/kubelet/config/init/kubelet这个文件;官方给出一坨文字解释,这里先不探究了,因为我没有用到。。。
接下来就是创建一些 静态pod 的配置文件了,包括API-server、controller-manager和scheduler。假如没有提供外部etcd,还会另外生成一个etcd的静态Pod配置文件。这些静态pod会被写入/etc/kubernetes/manifests,kubelet进程会监控这个目录,从而创建相关的pod。
假如第五步比较顺利,这个时候k8s的控制面进程(api-server、controller-manager、scheduler)就全都起来了。
如果传入了参数–feature-gates=DynamicKubeletConfig,又会对kubelet进行一坨操作,因为没有用到,所以这里不做详细探究。
给当前的节点(Master节点)打label和taints,从而防止其他的负载在这个节点运行。
生成token,其他节点如果想加入当前节点(Master)所在的k8s集群,会用到这个token。
进行一些允许节点以 Bootstrap Tokens) 和 TLS bootstrapping 方式加入集群的必要的操作:
设置RBAC规则,同时创建一个用于节点加入集群的ConfigMap(包含了加入集群需要的所有信息)。
让Bootstrap Tokens可以访问CSR签名的API。
给新的CSR请求配置自动认证机制。
通过API-server安装DNS服务器(1.11版本后默认为CoreDNS,早期版本默认为kube-dns)和kube-proxy插件。这里需要注意的是,DNS服务器只有在安装了CNI(flannel或calico)之后才会真正部署,否则会处于挂起(pending)状态。
到这里基本上就告一段落了
根据上面提示继续执行
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
5. node加入集群(node节点操作)
5.1需要获取sha256及token,一般在刚刚的执行结果里就有。如果token过期了,在主节点执行以下操作
kubeadm token create
[root@k8s-master ~]# kubeadm token create
0w3a92.ijgba9ia0e3scicg
[root@k8s-master ~]# kubeadm token list
TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS
0w3a92.ijgba9ia0e3scicg 23h 2019-09-08T22:02:40+08:00 authentication,signing <none> system:bootstrappers:kubeadm:default-node-token
t0ehj8.k4ef3gq0icr3etl0 22h 2019-09-08T20:58:34+08:00 authentication,signing The default bootstrap token generated by 'kubeadm init'. system:bootstrappers:kubeadm:default-node-token
[root@k8s-master ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
ce07a7f5b259961884c55e3ff8784b1eda6f8b5931e6fa2ab0b30b6a4234c09a
然后加入集群
kubeadm join 192.168.10.11:6443 --token yhns57.4s3y2yll21ew8mta \
--discovery-token-ca-cert-hash sha256:ce07a7f5b259961884c55e3ff8784b1eda6f8b5931e6fa2ab0b30b6a4234c09a
master节点上查看:
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady master 17m v1.16.0
node1 NotReady <none> 3m31s v1.16.0
node2 NotReady <none> 119s v1.16.0
[root@master ~]# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-58cc8c89f4-5jk25 0/1 Pending 0 23m
kube-system coredns-58cc8c89f4-j97m8 0/1 Pending 0 23m
kube-system etcd-master 1/1 Running 0 22m
kube-system kube-apiserver-master 1/1 Running 0 22m
kube-system kube-controller-manager-master 1/1 Running 0 22m
kube-system kube-proxy-85djp 1/1 Running 0 23m
kube-system kube-proxy-gggd7 1/1 Running 0 9m30s
kube-system kube-proxy-lprnf 1/1 Running 0 7m58s
kube-system kube-scheduler-master 1/1 Running 0 22m
至此完成了Master节点上k8s软件的安装,但集群内还没有可用的工作Node,也缺少容器网络的配置。
查看pods状态信息,可以看到还有一个dns的pod处于Pending状态,这是受缺少容器网络支持的影响而造成的。
查看nodes状态信息,看到node节点的状态为NotReady
6. 安装网络插件
接着安装网络插件我们选择weave(感觉更方便),也可选择flannel
再master上运行:
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
再检查nodes和pod状态
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 43m v1.16.0
node1 Ready <none> 29m v1.16.0
node2 Ready <none> 27m v1.16.0
[root@master ~]# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-58cc8c89f4-5jk25 1/1 Running 0 41m
kube-system coredns-58cc8c89f4-j97m8 1/1 Running 0 41m
kube-system etcd-master 1/1 Running 0 41m
kube-system kube-apiserver-master 1/1 Running 0 40m
kube-system kube-controller-manager-master 1/1 Running 0 41m
kube-system kube-proxy-85djp 1/1 Running 0 41m
kube-system kube-proxy-gggd7 1/1 Running 0 28m
kube-system kube-proxy-lprnf 1/1 Running 0 26m
kube-system kube-scheduler-master 1/1 Running 0 41m
kube-system weave-net-h2x7w 2/2 Running 0 2m59s
kube-system weave-net-jmqdd 2/2 Running 0 2m59s
kube-system weave-net-w2frw 2/2 Running 0 2m59s
[root@master ~]# kubectl exec -n kube-system weave-net-h2x7w -c weave -- /home/weave/weave --local status
Version: 2.5.2 (up to date; next check at 2019/10/09 14:32:36)
Service: router
Protocol: weave 1..2
Name: 5a:8f:40:d9:92:59(node2)
Encryption: disabled
PeerDiscovery: enabled
Targets: 3
Connections: 3 (2 established, 1 failed)
Peers: 3 (with 6 established connections)
TrustedSubnets: none
Service: ipam
Status: ready
Range: 10.32.0.0/12
DefaultSubnet: 10.32.0.0/12
7. 测试k8s集群
[root@master ~]# kubectl create deployment nginx --image=nginx
deployment.apps/nginx created
[root@master ~]# kubectl expose deployment nginx --port=80 --type=NodePort
service/nginx exposedservice/nginx exposed
[root@master ~]# kubectl get pods,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-86c57db685-gbs8f 1/1 Running 0 2m28s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 147m
service/nginx NodePort 10.99.194.238 <none> 80:30560/TCP 26s
参考:
1. https://blog.csdn.net/allensandy/article/details/101470532
更多推荐
所有评论(0)