From aab4d2f5b6c4b3922301fc5deba093fc8c8671c8 Mon Sep 17 00:00:00 2001 From: Jesse Seldess Date: Tue, 14 May 2019 09:50:35 -0400 Subject: [PATCH] Update k8s tutorials - Use helm upgrade for adding and removing nodes and cluster upgrades - Correct downgrade option for 19.1 k8s upgrade - Wrap commands to be more visible Fixes #4689. --- _includes/metric-names.md | 246 ++++++++++++++++++ .../kubernetes-prometheus-alertmanager.md | 15 +- .../kubernetes-remove-nodes-insecure.md | 66 +++-- .../kubernetes-remove-nodes-secure.md | 48 ++-- .../orchestration/kubernetes-scale-cluster.md | 32 ++- .../kubernetes-upgrade-cluster.md | 121 +++++++-- .../start-cockroachdb-helm-insecure.md | 11 +- .../start-cockroachdb-helm-secure.md | 11 +- .../start-cockroachdb-insecure.md | 6 +- .../orchestration/start-cockroachdb-secure.md | 6 +- .../v19.1/orchestration/start-kubernetes.md | 4 +- .../orchestration/test-cluster-insecure.md | 18 +- .../orchestration/test-cluster-secure.md | 41 +-- images/v19.1/kubernetes-upgrade.png | Bin 0 -> 93669 bytes 14 files changed, 512 insertions(+), 113 deletions(-) create mode 100644 _includes/metric-names.md create mode 100644 images/v19.1/kubernetes-upgrade.png diff --git a/_includes/metric-names.md b/_includes/metric-names.md new file mode 100644 index 00000000000..80098b223b9 --- /dev/null +++ b/_includes/metric-names.md @@ -0,0 +1,246 @@ +Name | Help +-----|----- +`addsstable.applications` | Number of SSTable ingestions applied (i.e., applied by Replicas) +`addsstable.copies` | Number of SSTable ingestions that required copying files during application +`addsstable.proposals` | Number of SSTable ingestions proposed (i.e., sent to Raft by lease holders) +`build.timestamp` | Build information +`capacity.available` | Available storage capacity +`capacity.reserved` | Capacity reserved for snapshots +`capacity.used` | Used storage capacity +`capacity` | Total storage capacity +`clock-offset.meannanos` | Mean clock offset with other nodes in nanoseconds +`clock-offset.stddevnanos` | Std dev clock offset with other nodes in nanoseconds +`compactor.compactingnanos` | Number of nanoseconds spent compacting ranges +`compactor.compactions.failure` | Number of failed compaction requests sent to the storage engine +`compactor.compactions.success` | Number of successful compaction requests sent to the storage engine +`compactor.suggestionbytes.compacted` | Number of logical bytes compacted from suggested compactions +`compactor.suggestionbytes.queued` | Number of logical bytes in suggested compactions in the queue +`compactor.suggestionbytes.skipped` | Number of logical bytes in suggested compactions which were not compacted +`distsender.batches.partial` | Number of partial batches processed +`distsender.batches` | Number of batches processed +`distsender.errors.notleaseholder` | Number of NotLeaseHolderErrors encountered +`distsender.rpc.sent.local` | Number of local RPCs sent +`distsender.rpc.sent.nextreplicaerror` | Number of RPCs sent due to per-replica errors +`distsender.rpc.sent` | Number of RPCs sent +`exec.error` | Number of batch KV requests that failed to execute on this node +`exec.latency` | Latency in nanoseconds of batch KV requests executed on this node +`exec.success` | Number of batch KV requests executed successfully on this node +`gcbytesage` | Cumulative age of non-live data in seconds +`gossip.bytes.received` | Number of received gossip bytes +`gossip.bytes.sent` | Number of sent gossip bytes +`gossip.connections.incoming` | Number of active incoming gossip connections +`gossip.connections.outgoing` | Number of active outgoing gossip connections +`gossip.connections.refused` | Number of refused incoming gossip connections +`gossip.infos.received` | Number of received gossip Info objects +`gossip.infos.sent` | Number of sent gossip Info objects +`intentage` | Cumulative age of intents in seconds +`intentbytes` | Number of bytes in intent KV pairs +`intentcount` | Count of intent keys +`keybytes` | Number of bytes taken up by keys +`keycount` | Count of all keys +`lastupdatenanos` | Time in nanoseconds since Unix epoch at which bytes/keys/intents metrics were last updated +`leases.epoch` | Number of replica leaseholders using epoch-based leases +`leases.error` | Number of failed lease requests +`leases.expiration` | Number of replica leaseholders using expiration-based leases +`leases.success` | Number of successful lease requests +`leases.transfers.error` | Number of failed lease transfers +`leases.transfers.success` | Number of successful lease transfers +`livebytes` | Number of bytes of live data (keys plus values) +`livecount` | Count of live keys +`liveness.epochincrements` | Number of times this node has incremented its liveness epoch +`liveness.heartbeatfailures` | Number of failed node liveness heartbeats from this node +`liveness.heartbeatlatency` | Node liveness heartbeat latency in nanoseconds +`liveness.heartbeatsuccesses` | Number of successful node liveness heartbeats from this node +`liveness.livenodes` | Number of live nodes in the cluster (will be 0 if this node is not itself live) +`node-id` | node ID with labels for advertised RPC and HTTP addresses +`queue.consistency.pending` | Number of pending replicas in the consistency checker queue +`queue.consistency.process.failure` | Number of replicas which failed processing in the consistency checker queue +`queue.consistency.process.success` | Number of replicas successfully processed by the consistency checker queue +`queue.consistency.processingnanos` | Nanoseconds spent processing replicas in the consistency checker queue +`queue.gc.info.abortspanconsidered` | Number of AbortSpan entries old enough to be considered for removal +`queue.gc.info.abortspangcnum` | Number of AbortSpan entries fit for removal +`queue.gc.info.abortspanscanned` | Number of transactions present in the AbortSpan scanned from the engine +`queue.gc.info.intentsconsidered` | Number of 'old' intents +`queue.gc.info.intenttxns` | Number of associated distinct transactions +`queue.gc.info.numkeysaffected` | Number of keys with GC'able data +`queue.gc.info.pushtxn` | Number of attempted pushes +`queue.gc.info.resolvesuccess` | Number of successful intent resolutions +`queue.gc.info.resolvetotal` | Number of attempted intent resolutions +`queue.gc.info.transactionspangcaborted` | Number of GC'able entries corresponding to aborted txns +`queue.gc.info.transactionspangccommitted` | Number of GC'able entries corresponding to committed txns +`queue.gc.info.transactionspangcpending` | Number of GC'able entries corresponding to pending txns +`queue.gc.info.transactionspanscanned` | Number of entries in transaction spans scanned from the engine +`queue.gc.pending` | Number of pending replicas in the GC queue +`queue.gc.process.failure` | Number of replicas which failed processing in the GC queue +`queue.gc.process.success` | Number of replicas successfully processed by the GC queue +`queue.gc.processingnanos` | Nanoseconds spent processing replicas in the GC queue +`queue.raftlog.pending` | Number of pending replicas in the Raft log queue +`queue.raftlog.process.failure` | Number of replicas which failed processing in the Raft log queue +`queue.raftlog.process.success` | Number of replicas successfully processed by the Raft log queue +`queue.raftlog.processingnanos` | Nanoseconds spent processing replicas in the Raft log queue +`queue.raftsnapshot.pending` | Number of pending replicas in the Raft repair queue +`queue.raftsnapshot.process.failure` | Number of replicas which failed processing in the Raft repair queue +`queue.raftsnapshot.process.success` | Number of replicas successfully processed by the Raft repair queue +`queue.raftsnapshot.processingnanos` | Nanoseconds spent processing replicas in the Raft repair queue +`queue.replicagc.pending` | Number of pending replicas in the replica GC queue +`queue.replicagc.process.failure` | Number of replicas which failed processing in the replica GC queue +`queue.replicagc.process.success` | Number of replicas successfully processed by the replica GC queue +`queue.replicagc.processingnanos` | Nanoseconds spent processing replicas in the replica GC queue +`queue.replicagc.removereplica` | Number of replica removals attempted by the replica gc queue +`queue.replicate.addreplica` | Number of replica additions attempted by the replicate queue +`queue.replicate.pending` | Number of pending replicas in the replicate queue +`queue.replicate.process.failure` | Number of replicas which failed processing in the replicate queue +`queue.replicate.process.success` | Number of replicas successfully processed by the replicate queue +`queue.replicate.processingnanos` | Nanoseconds spent processing replicas in the replicate queue +`queue.replicate.purgatory` | Number of replicas in the replicate queue's purgatory, awaiting allocation options +`queue.replicate.rebalancereplica` | Number of replica rebalancer-initiated additions attempted by the replicate queue +`queue.replicate.removedeadreplica` | Number of dead replica removals attempted by the replicate queue (typically in response to a node outage) +`queue.replicate.removereplica` | Number of replica removals attempted by the replicate queue (typically in response to a rebalancer-initiated addition) +`queue.replicate.transferlease` | Number of range lease transfers attempted by the replicate queue +`queue.split.pending` | Number of pending replicas in the split queue +`queue.split.process.failure` | Number of replicas which failed processing in the split queue +`queue.split.process.success` | Number of replicas successfully processed by the split queue +`queue.split.processingnanos` | Nanoseconds spent processing replicas in the split queue +`queue.tsmaintenance.pending` | Number of pending replicas in the time series maintenance queue +`queue.tsmaintenance.process.failure` | Number of replicas which failed processing in the time series maintenance queue +`queue.tsmaintenance.process.success` | Number of replicas successfully processed by the time series maintenance queue +`queue.tsmaintenance.processingnanos` | Nanoseconds spent processing replicas in the time series maintenance queue +`raft.commandsapplied` | Count of Raft commands applied +`raft.enqueued.pending` | Number of pending outgoing messages in the Raft Transport queue +`raft.heartbeats.pending` | Number of pending heartbeats and responses waiting to be coalesced +`raft.process.commandcommit.latency` | Latency histogram in nanoseconds for committing Raft commands +`raft.process.logcommit.latency` | Latency histogram in nanoseconds for committing Raft log entries +`raft.process.tickingnanos` | Nanoseconds spent in store.processRaft() processing replica.Tick() +`raft.process.workingnanos` | Nanoseconds spent in store.processRaft() working +`raft.rcvd.app` | Number of MsgApp messages received by this store +`raft.rcvd.appresp` | Number of MsgAppResp messages received by this store +`raft.rcvd.dropped` | Number of dropped incoming Raft messages +`raft.rcvd.heartbeat` | Number of (coalesced, if enabled) MsgHeartbeat messages received by this store +`raft.rcvd.heartbeatresp` | Number of (coalesced, if enabled) MsgHeartbeatResp messages received by this store +`raft.rcvd.prevote` | Number of MsgPreVote messages received by this store +`raft.rcvd.prevoteresp` | Number of MsgPreVoteResp messages received by this store +`raft.rcvd.prop` | Number of MsgProp messages received by this store +`raft.rcvd.snap` | Number of MsgSnap messages received by this store +`raft.rcvd.timeoutnow` | Number of MsgTimeoutNow messages received by this store +`raft.rcvd.transferleader` | Number of MsgTransferLeader messages received by this store +`raft.rcvd.vote` | Number of MsgVote messages received by this store +`raft.rcvd.voteresp` | Number of MsgVoteResp messages received by this store +`raft.ticks` | Number of Raft ticks queued +`raftlog.behind` | Number of Raft log entries followers on other stores are behind +`raftlog.truncated` | Number of Raft log entries truncated +`range.adds` | Number of range additions +`range.raftleadertransfers` | Number of raft leader transfers +`range.removes` | Number of range removals +`range.snapshots.generated` | Number of generated snapshots +`range.snapshots.normal-applied` | Number of applied snapshots +`range.snapshots.preemptive-applied` | Number of applied pre-emptive snapshots +`range.splits` | Number of range splits +`ranges.unavailable` | Number of ranges with fewer live replicas than needed for quorum +`ranges.underreplicated` | Number of ranges with fewer live replicas than the replication target +`ranges` | Number of ranges +`rebalancing.writespersecond` | Number of keys written (i.e., applied by raft) per second to the store, averaged over a large time period as used in rebalancing decisions +`replicas.commandqueue.combinedqueuesize` | Number of commands in all CommandQueues combined +`replicas.commandqueue.combinedreadcount` | Number of read-only commands in all CommandQueues combined +`replicas.commandqueue.combinedwritecount` | Number of read-write commands in all CommandQueues combined +`replicas.commandqueue.maxoverlaps` | Largest number of overlapping commands seen when adding to any CommandQueue +`replicas.commandqueue.maxreadcount` | Largest number of read-only commands in any CommandQueue +`replicas.commandqueue.maxsize` | Largest number of commands in any CommandQueue +`replicas.commandqueue.maxtreesize` | Largest number of intervals in any CommandQueue's interval tree +`replicas.commandqueue.maxwritecount` | Largest number of read-write commands in any CommandQueue +`replicas.leaders_not_leaseholders` | Number of replicas that are Raft leaders whose range lease is held by another store +`replicas.leaders` | Number of raft leaders +`replicas.leaseholders` | Number of lease holders +`replicas.quiescent` | Number of quiesced replicas +`replicas.reserved` | Number of replicas reserved for snapshots +`replicas` | Number of replicas +`requests.backpressure.split` | Number of backpressured writes waiting on a Range split +`requests.slow.commandqueue` | Number of requests that have been stuck for a long time in the command queue +`requests.slow.distsender` | Number of requests that have been stuck for a long time in the dist sender +`requests.slow.lease` | Number of requests that have been stuck for a long time acquiring a lease +`requests.slow.raft` | Number of requests that have been stuck for a long time in raft +`rocksdb.block.cache.hits` | Count of block cache hits +`rocksdb.block.cache.misses` | Count of block cache misses +`rocksdb.block.cache.pinned-usage` | Bytes pinned by the block cache +`rocksdb.block.cache.usage` | Bytes used by the block cache +`rocksdb.bloom.filter.prefix.checked` | Number of times the bloom filter was checked +`rocksdb.bloom.filter.prefix.useful` | Number of times the bloom filter helped avoid iterator creation +`rocksdb.compactions` | Number of table compactions +`rocksdb.flushes` | Number of table flushes +`rocksdb.memtable.total-size` | Current size of memtable in bytes +`rocksdb.num-sstables` | Number of rocksdb SSTables +`rocksdb.read-amplification` | Number of disk reads per query +`rocksdb.table-readers-mem-estimate` | Memory used by index and filter blocks +`round-trip-latency` | Distribution of round-trip latencies with other nodes in nanoseconds +`security.certificate.expiration.ca` | Expiration timestamp in seconds since Unix epoch for the CA certificate. 0 means no certificate or error. +`security.certificate.expiration.node` | Expiration timestamp in seconds since Unix epoch for the node certificate. 0 means no certificate or error. +`sql.bytesin` | Number of sql bytes received +`sql.bytesout` | Number of sql bytes sent +`sql.conns` | Number of active sql connections +`sql.ddl.count` | Number of SQL DDL statements +`sql.delete.count` | Number of SQL DELETE statements +`sql.distsql.exec.latency` | Latency in nanoseconds of DistSQL statement execution +`sql.distsql.flows.active` | Number of distributed SQL flows currently active +`sql.distsql.flows.total` | Number of distributed SQL flows executed +`sql.distsql.queries.active` | Number of distributed SQL queries currently active +`sql.distsql.queries.total` | Number of distributed SQL queries executed +`sql.distsql.select.count` | Number of DistSQL SELECT statements +`sql.distsql.service.latency` | Latency in nanoseconds of DistSQL request execution +`sql.exec.latency` | Latency in nanoseconds of SQL statement execution +`sql.insert.count` | Number of SQL INSERT statements +`sql.mem.current` | Current sql statement memory usage +`sql.mem.distsql.current` | Current sql statement memory usage for distsql +`sql.mem.distsql.max` | Memory usage per sql statement for distsql +`sql.mem.max` | Memory usage per sql statement +`sql.mem.session.current` | Current sql session memory usage +`sql.mem.session.max` | Memory usage per sql session +`sql.mem.txn.current` | Current sql transaction memory usage +`sql.mem.txn.max` | Memory usage per sql transaction +`sql.misc.count` | Number of other SQL statements +`sql.query.count` | Number of SQL queries +`sql.select.count` | Number of SQL SELECT statements +`sql.service.latency` | Latency in nanoseconds of SQL request execution +`sql.txn.abort.count` | Number of SQL transaction ABORT statements +`sql.txn.begin.count` | Number of SQL transaction BEGIN statements +`sql.txn.commit.count` | Number of SQL transaction COMMIT statements +`sql.txn.rollback.count` | Number of SQL transaction ROLLBACK statements +`sql.update.count` | Number of SQL UPDATE statements +`sys.cgo.allocbytes` | Current bytes of memory allocated by cgo +`sys.cgo.totalbytes` | Total bytes of memory allocated by cgo, but not released +`sys.cgocalls` | Total number of cgo call +`sys.cpu.sys.ns` | Total system cpu time in nanoseconds +`sys.cpu.sys.percent` | Current system cpu percentage +`sys.cpu.user.ns` | Total user cpu time in nanoseconds +`sys.cpu.user.percent` | Current user cpu percentage +`sys.fd.open` | Process open file descriptors +`sys.fd.softlimit` | Process open FD soft limit +`sys.gc.count` | Total number of GC runs +`sys.gc.pause.ns` | Total GC pause in nanoseconds +`sys.gc.pause.percent` | Current GC pause percentage +`sys.go.allocbytes` | Current bytes of memory allocated by go +`sys.go.totalbytes` | Total bytes of memory allocated by go, but not released +`sys.goroutines` | Current number of goroutines +`sys.rss` | Current process RSS +`sys.uptime` | Process uptime in seconds +`sysbytes` | Number of bytes in system KV pairs +`syscount` | Count of system KV pairs +`timeseries.write.bytes` | Total size in bytes of metric samples written to disk +`timeseries.write.errors` | Total errors encountered while attempting to write metrics to disk +`timeseries.write.samples` | Total number of metric samples written to disk +`totalbytes` | Total number of bytes taken up by keys and values including non-live data +`tscache.skl.read.pages` | Number of pages in the read timestamp cache +`tscache.skl.read.rotations` | Number of page rotations in the read timestamp cache +`tscache.skl.write.pages` | Number of pages in the write timestamp cache +`tscache.skl.write.rotations` | Number of page rotations in the write timestamp cache +`txn.abandons` | Number of abandoned KV transactions +`txn.aborts` | Number of aborted KV transactions +`txn.autoretries` | Number of automatic retries to avoid serializable restarts +`txn.commits1PC` | Number of committed one-phase KV transactions +`txn.commits` | Number of committed KV transactions (including 1PC) +`txn.durations` | KV transaction durations in nanoseconds +`txn.restarts.deleterange` | Number of restarts due to a forwarded commit timestamp and a DeleteRange command +`txn.restarts.possiblereplay` | Number of restarts due to possible replays of command batches at the storage layer +`txn.restarts.serializable` | Number of restarts due to a forwarded commit timestamp and isolation=SERIALIZABLE +`txn.restarts.writetooold` | Number of restarts due to a concurrent writer committing first +`txn.restarts` | Number of restarted KV transactions +`valbytes` | Number of bytes taken up by values +`valcount` | Count of all values diff --git a/_includes/v19.1/orchestration/kubernetes-prometheus-alertmanager.md b/_includes/v19.1/orchestration/kubernetes-prometheus-alertmanager.md index 3a8532095e8..795ec32f5df 100644 --- a/_includes/v19.1/orchestration/kubernetes-prometheus-alertmanager.md +++ b/_includes/v19.1/orchestration/kubernetes-prometheus-alertmanager.md @@ -42,7 +42,8 @@ If you're on Hosted GKE, before starting, make sure the email address associated {% include copy-clipboard.html %} ~~~ shell - $ kubectl apply -f https://raw.githubusercontent.com/coreos/prometheus-operator/release-0.20/bundle.yaml + $ kubectl apply \ + -f https://raw.githubusercontent.com/coreos/prometheus-operator/release-0.20/bundle.yaml ~~~ ~~~ @@ -68,7 +69,8 @@ If you're on Hosted GKE, before starting, make sure the email address associated {% include copy-clipboard.html %} ~~~ shell - $ kubectl apply -f https://raw.githubusercontent.com/cockroachdb/cockroach/master/cloud/kubernetes/prometheus/prometheus.yaml + $ kubectl apply \ + -f https://raw.githubusercontent.com/cockroachdb/cockroach/master/cloud/kubernetes/prometheus/prometheus.yaml ~~~ ~~~ @@ -115,7 +117,8 @@ Active monitoring helps you spot problems early, but it is also essential to sen {% include copy-clipboard.html %} ~~~ shell - $ kubectl create secret generic alertmanager-cockroachdb --from-file=alertmanager.yaml=alertmanager-config.yaml + $ kubectl create secret generic alertmanager-cockroachdb \ + --from-file=alertmanager.yaml=alertmanager-config.yaml ~~~ ~~~ @@ -139,7 +142,8 @@ Active monitoring helps you spot problems early, but it is also essential to sen {% include copy-clipboard.html %} ~~~ shell - $ kubectl apply -f https://raw.githubusercontent.com/cockroachdb/cockroach/master/cloud/kubernetes/prometheus/alertmanager.yaml + $ kubectl apply \ + -f https://raw.githubusercontent.com/cockroachdb/cockroach/master/cloud/kubernetes/prometheus/alertmanager.yaml ~~~ ~~~ @@ -168,7 +172,8 @@ Active monitoring helps you spot problems early, but it is also essential to sen {% include copy-clipboard.html %} ~~~ shell - $ kubectl apply -f https://raw.githubusercontent.com/cockroachdb/cockroach/master/cloud/kubernetes/prometheus/alert-rules.yaml + $ kubectl apply \ + -f https://raw.githubusercontent.com/cockroachdb/cockroach/master/cloud/kubernetes/prometheus/alert-rules.yaml ~~~ ~~~ diff --git a/_includes/v19.1/orchestration/kubernetes-remove-nodes-insecure.md b/_includes/v19.1/orchestration/kubernetes-remove-nodes-insecure.md index 06cce9aff79..00c4f01c84b 100644 --- a/_includes/v19.1/orchestration/kubernetes-remove-nodes-insecure.md +++ b/_includes/v19.1/orchestration/kubernetes-remove-nodes-insecure.md @@ -1,4 +1,4 @@ -To safely remove a node from your cluster, you must first decommission the node and only then adjust the `--replicas` value of your StatefulSet configuration to permanently remove it. This sequence is important because the decommissioning process lets a node finish in-flight requests, rejects any new requests, and transfers all range replicas and range leases off the node. +To safely remove a node from your cluster, you must first decommission the node and only then adjust the `Replicas` value of your StatefulSet configuration to permanently remove it. This sequence is important because the decommissioning process lets a node finish in-flight requests, rejects any new requests, and transfers all range replicas and range leases off the node. {{site.data.alerts.callout_danger}} If you remove nodes without first telling CockroachDB to decommission them, you may cause data or even cluster unavailability. For more details about how this works and what to consider before removing nodes, see [Decommission Nodes](remove-nodes.html). @@ -9,17 +9,22 @@ If you remove nodes without first telling CockroachDB to decommission them, you
{% include copy-clipboard.html %} ~~~ shell - $ kubectl run cockroachdb -it --image=cockroachdb/cockroach --rm --restart=Never \ - -- node status --insecure --host=cockroachdb-public + $ kubectl run cockroachdb -it \ + --image=cockroachdb/cockroach:{{page.release_info.version}} \ + --rm \ + --restart=Never \ + -- node status \ + --insecure \ + --host=cockroachdb-public ~~~ ~~~ id | address | build | started_at | updated_at | is_available | is_live +----+---------------------------------------------------------------------------------+--------+----------------------------------+----------------------------------+--------------+---------+ - 1 | cockroachdb-0.cockroachdb.default.svc.cluster.local:26257 | v2.1.1 | 2018-11-29 16:04:36.486082+00:00 | 2018-11-29 18:24:24.587454+00:00 | true | true - 2 | cockroachdb-2.cockroachdb.default.svc.cluster.local:26257 | v2.1.1 | 2018-11-29 16:55:03.880406+00:00 | 2018-11-29 18:24:23.469302+00:00 | true | true - 3 | cockroachdb-1.cockroachdb.default.svc.cluster.local:26257 | v2.1.1 | 2018-11-29 16:04:41.383588+00:00 | 2018-11-29 18:24:25.030175+00:00 | true | true - 4 | cockroachdb-3.cockroachdb.default.svc.cluster.local:26257 | v2.1.1 | 2018-11-29 17:31:19.990784+00:00 | 2018-11-29 18:24:26.041686+00:00 | true | true + 1 | cockroachdb-0.cockroachdb.default.svc.cluster.local:26257 | {{page.release_info.version}} | 2018-11-29 16:04:36.486082+00:00 | 2018-11-29 18:24:24.587454+00:00 | true | true + 2 | cockroachdb-2.cockroachdb.default.svc.cluster.local:26257 | {{page.release_info.version}} | 2018-11-29 16:55:03.880406+00:00 | 2018-11-29 18:24:23.469302+00:00 | true | true + 3 | cockroachdb-1.cockroachdb.default.svc.cluster.local:26257 | {{page.release_info.version}} | 2018-11-29 16:04:41.383588+00:00 | 2018-11-29 18:24:25.030175+00:00 | true | true + 4 | cockroachdb-3.cockroachdb.default.svc.cluster.local:26257 | {{page.release_info.version}} | 2018-11-29 17:31:19.990784+00:00 | 2018-11-29 18:24:26.041686+00:00 | true | true (4 rows) ~~~ @@ -28,17 +33,22 @@ If you remove nodes without first telling CockroachDB to decommission them, you
{% include copy-clipboard.html %} ~~~ shell - $ kubectl run cockroachdb -it --image=cockroachdb/cockroach --rm --restart=Never \ - -- node status --insecure --host=my-release-cockroachdb-public + $ kubectl run cockroachdb -it \ + --image=cockroachdb/cockroach:{{page.release_info.version}} \ + --rm \ + --restart=Never \ + -- node status \ + --insecure \ + --host=my-release-cockroachdb-public ~~~ ~~~ id | address | build | started_at | updated_at | is_available | is_live +----+---------------------------------------------------------------------------------+--------+----------------------------------+----------------------------------+--------------+---------+ - 1 | my-release-cockroachdb-0.my-release-cockroachdb.default.svc.cluster.local:26257 | v2.1.1 | 2018-11-29 16:04:36.486082+00:00 | 2018-11-29 18:24:24.587454+00:00 | true | true - 2 | my-release-cockroachdb-2.my-release-cockroachdb.default.svc.cluster.local:26257 | v2.1.1 | 2018-11-29 16:55:03.880406+00:00 | 2018-11-29 18:24:23.469302+00:00 | true | true - 3 | my-release-cockroachdb-1.my-release-cockroachdb.default.svc.cluster.local:26257 | v2.1.1 | 2018-11-29 16:04:41.383588+00:00 | 2018-11-29 18:24:25.030175+00:00 | true | true - 4 | my-release-cockroachdb-3.my-release-cockroachdb.default.svc.cluster.local:26257 | v2.1.1 | 2018-11-29 17:31:19.990784+00:00 | 2018-11-29 18:24:26.041686+00:00 | true | true + 1 | my-release-cockroachdb-0.my-release-cockroachdb.default.svc.cluster.local:26257 | {{page.release_info.version}} | 2018-11-29 16:04:36.486082+00:00 | 2018-11-29 18:24:24.587454+00:00 | true | true + 2 | my-release-cockroachdb-2.my-release-cockroachdb.default.svc.cluster.local:26257 | {{page.release_info.version}} | 2018-11-29 16:55:03.880406+00:00 | 2018-11-29 18:24:23.469302+00:00 | true | true + 3 | my-release-cockroachdb-1.my-release-cockroachdb.default.svc.cluster.local:26257 | {{page.release_info.version}} | 2018-11-29 16:04:41.383588+00:00 | 2018-11-29 18:24:25.030175+00:00 | true | true + 4 | my-release-cockroachdb-3.my-release-cockroachdb.default.svc.cluster.local:26257 | {{page.release_info.version}} | 2018-11-29 17:31:19.990784+00:00 | 2018-11-29 18:24:26.041686+00:00 | true | true (4 rows) ~~~
@@ -52,16 +62,26 @@ If you remove nodes without first telling CockroachDB to decommission them, you
{% include copy-clipboard.html %} ~~~ shell - $ kubectl run cockroachdb -it --image=cockroachdb/cockroach --rm --restart=Never \ - -- node decommission --insecure --host=cockroachdb-public + $ kubectl run cockroachdb -it \ + --image=cockroachdb/cockroach:{{page.release_info.version}} \ + --rm \ + --restart=Never \ + -- node decommission \ + --insecure \ + --host=cockroachdb-public ~~~
{% include copy-clipboard.html %} ~~~ shell - $ kubectl run cockroachdb -it --image=cockroachdb/cockroach --rm --restart=Never \ - -- node decommission --insecure --host=my-release-cockroachdb-public + $ kubectl run cockroachdb -it \ + --image=cockroachdb/cockroach:{{page.release_info.version}} \ + --rm \ + --restart=Never \ + -- node decommission \ + --insecure \ + --host=my-release-cockroachdb-public ~~~
@@ -85,7 +105,7 @@ If you remove nodes without first telling CockroachDB to decommission them, you No more data reported on target nodes. Please verify cluster health before removing the nodes. ~~~ -3. Once the node has been decommissioned, use the `kubectl scale` command to remove a pod from your StatefulSet: +3. Once the node has been decommissioned, remove a pod from your StatefulSet:
{% include copy-clipboard.html %} @@ -101,10 +121,10 @@ If you remove nodes without first telling CockroachDB to decommission them, you
{% include copy-clipboard.html %} ~~~ shell - $ kubectl scale statefulset my-release-cockroachdb --replicas=3 - ~~~ - - ~~~ - statefulset "my-release-cockroachdb" scaled + $ helm upgrade \ + my-release \ + stable/cockroachdb \ + --set Replicas=3 \ + --reuse-values ~~~
diff --git a/_includes/v19.1/orchestration/kubernetes-remove-nodes-secure.md b/_includes/v19.1/orchestration/kubernetes-remove-nodes-secure.md index adf42307280..2d98eefbfef 100644 --- a/_includes/v19.1/orchestration/kubernetes-remove-nodes-secure.md +++ b/_includes/v19.1/orchestration/kubernetes-remove-nodes-secure.md @@ -1,4 +1,4 @@ -To safely remove a node from your cluster, you must first decommission the node and only then adjust the `--replicas` value of your StatefulSet configuration to permanently remove it. This sequence is important because the decommissioning process lets a node finish in-flight requests, rejects any new requests, and transfers all range replicas and range leases off the node. +To safely remove a node from your cluster, you must first decommission the node and only then adjust the `Replicas` value of your StatefulSet configuration to permanently remove it. This sequence is important because the decommissioning process lets a node finish in-flight requests, rejects any new requests, and transfers all range replicas and range leases off the node. {{site.data.alerts.callout_danger}} If you remove nodes without first telling CockroachDB to decommission them, you may cause data or even cluster unavailability. For more details about how this works and what to consider before removing nodes, see [Decommission Nodes](remove-nodes.html). @@ -9,16 +9,19 @@ If you remove nodes without first telling CockroachDB to decommission them, you
{% include copy-clipboard.html %} ~~~ shell - $ kubectl exec -it cockroachdb-client-secure -- ./cockroach node status --certs-dir=/cockroach-certs --host=cockroachdb-public + $ kubectl exec -it cockroachdb-client-secure \ + -- ./cockroach node status \ + --certs-dir=/cockroach-certs \ + --host=cockroachdb-public ~~~ ~~~ id | address | build | started_at | updated_at | is_available | is_live +----+---------------------------------------------------------------------------------+--------+----------------------------------+----------------------------------+--------------+---------+ - 1 | cockroachdb-0.cockroachdb.default.svc.cluster.local:26257 | v2.1.1 | 2018-11-29 16:04:36.486082+00:00 | 2018-11-29 18:24:24.587454+00:00 | true | true - 2 | cockroachdb-2.cockroachdb.default.svc.cluster.local:26257 | v2.1.1 | 2018-11-29 16:55:03.880406+00:00 | 2018-11-29 18:24:23.469302+00:00 | true | true - 3 | cockroachdb-1.cockroachdb.default.svc.cluster.local:26257 | v2.1.1 | 2018-11-29 16:04:41.383588+00:00 | 2018-11-29 18:24:25.030175+00:00 | true | true - 4 | cockroachdb-3.cockroachdb.default.svc.cluster.local:26257 | v2.1.1 | 2018-11-29 17:31:19.990784+00:00 | 2018-11-29 18:24:26.041686+00:00 | true | true + 1 | cockroachdb-0.cockroachdb.default.svc.cluster.local:26257 | {{page.release_info.version}} | 2018-11-29 16:04:36.486082+00:00 | 2018-11-29 18:24:24.587454+00:00 | true | true + 2 | cockroachdb-2.cockroachdb.default.svc.cluster.local:26257 | {{page.release_info.version}} | 2018-11-29 16:55:03.880406+00:00 | 2018-11-29 18:24:23.469302+00:00 | true | true + 3 | cockroachdb-1.cockroachdb.default.svc.cluster.local:26257 | {{page.release_info.version}} | 2018-11-29 16:04:41.383588+00:00 | 2018-11-29 18:24:25.030175+00:00 | true | true + 4 | cockroachdb-3.cockroachdb.default.svc.cluster.local:26257 | {{page.release_info.version}} | 2018-11-29 17:31:19.990784+00:00 | 2018-11-29 18:24:26.041686+00:00 | true | true (4 rows) ~~~
@@ -26,16 +29,19 @@ If you remove nodes without first telling CockroachDB to decommission them, you
{% include copy-clipboard.html %} ~~~ shell - $ kubectl exec -it cockroachdb-client-secure -- ./cockroach node status --certs-dir=/cockroach-certs --host=my-release-cockroachdb-public + $ kubectl exec -it cockroachdb-client-secure \ + -- ./cockroach node status \ + --certs-dir=/cockroach-certs \ + --host=my-release-cockroachdb-public ~~~ ~~~ id | address | build | started_at | updated_at | is_available | is_live +----+---------------------------------------------------------------------------------+--------+----------------------------------+----------------------------------+--------------+---------+ - 1 | my-release-cockroachdb-0.my-release-cockroachdb.default.svc.cluster.local:26257 | v2.1.1 | 2018-11-29 16:04:36.486082+00:00 | 2018-11-29 18:24:24.587454+00:00 | true | true - 2 | my-release-cockroachdb-2.my-release-cockroachdb.default.svc.cluster.local:26257 | v2.1.1 | 2018-11-29 16:55:03.880406+00:00 | 2018-11-29 18:24:23.469302+00:00 | true | true - 3 | my-release-cockroachdb-1.my-release-cockroachdb.default.svc.cluster.local:26257 | v2.1.1 | 2018-11-29 16:04:41.383588+00:00 | 2018-11-29 18:24:25.030175+00:00 | true | true - 4 | my-release-cockroachdb-3.my-release-cockroachdb.default.svc.cluster.local:26257 | v2.1.1 | 2018-11-29 17:31:19.990784+00:00 | 2018-11-29 18:24:26.041686+00:00 | true | true + 1 | my-release-cockroachdb-0.my-release-cockroachdb.default.svc.cluster.local:26257 | {{page.release_info.version}} | 2018-11-29 16:04:36.486082+00:00 | 2018-11-29 18:24:24.587454+00:00 | true | true + 2 | my-release-cockroachdb-2.my-release-cockroachdb.default.svc.cluster.local:26257 | {{page.release_info.version}} | 2018-11-29 16:55:03.880406+00:00 | 2018-11-29 18:24:23.469302+00:00 | true | true + 3 | my-release-cockroachdb-1.my-release-cockroachdb.default.svc.cluster.local:26257 | {{page.release_info.version}} | 2018-11-29 16:04:41.383588+00:00 | 2018-11-29 18:24:25.030175+00:00 | true | true + 4 | my-release-cockroachdb-3.my-release-cockroachdb.default.svc.cluster.local:26257 | {{page.release_info.version}} | 2018-11-29 17:31:19.990784+00:00 | 2018-11-29 18:24:26.041686+00:00 | true | true (4 rows) ~~~
@@ -51,14 +57,20 @@ If you remove nodes without first telling CockroachDB to decommission them, you
{% include copy-clipboard.html %} ~~~ shell - $ kubectl exec -it cockroachdb-client-secure -- ./cockroach node decommission --insecure --host=cockroachdb-public + $ kubectl exec -it cockroachdb-client-secure \ + -- ./cockroach node decommission \ + --insecure \ + --host=cockroachdb-public ~~~
{% include copy-clipboard.html %} ~~~ shell - $ kubectl exec -it cockroachdb-client-secure -- ./cockroach node decommission --insecure --host=my-release-cockroachdb-public + $ kubectl exec -it cockroachdb-client-secure \ + -- ./cockroach node decommission \ + --insecure \ + --host=my-release-cockroachdb-public ~~~
@@ -98,10 +110,10 @@ If you remove nodes without first telling CockroachDB to decommission them, you
{% include copy-clipboard.html %} ~~~ shell - $ kubectl scale statefulset my-release-cockroachdb --replicas=3 - ~~~ - - ~~~ - statefulset "my-release-cockroachdb" scaled + $ helm upgrade \ + my-release \ + stable/cockroachdb \ + --set Replicas=3 \ + --reuse-values ~~~
diff --git a/_includes/v19.1/orchestration/kubernetes-scale-cluster.md b/_includes/v19.1/orchestration/kubernetes-scale-cluster.md index 61df086548b..82ad56a3f5d 100644 --- a/_includes/v19.1/orchestration/kubernetes-scale-cluster.md +++ b/_includes/v19.1/orchestration/kubernetes-scale-cluster.md @@ -1,12 +1,11 @@ -The Kubernetes cluster contains 4 nodes, one master and 3 workers. Pods get placed only on worker nodes, so to ensure that you do not have two pods on the same node (as recommended in our [production best practices](recommended-production-settings.html)), you need to add a new worker node and then edit your StatefulSet configuration to add another pod. -The Kubernetes cluster we created contains 3 nodes that pods can be run on. To ensure that you do not have two pods on the same node (as recommended in our [production best practices](recommended-production-settings.html)), you need to add a new node and then edit your StatefulSet configuration to add another pod. +The Kubernetes cluster contains 4 nodes, one master and 3 workers. Pods get placed only on worker nodes, so to ensure that you do not have two pods on the same node (as recommended in our [production best practices](recommended-production-settings.html)), you need to add a new worker node and then edit your StatefulSet configuration to add another pod for the new CockroachDB node. 1. Add a worker node: - On GKE, [resize your cluster](https://cloud.google.com/kubernetes-engine/docs/how-to/resizing-a-cluster). - On GCE, resize your [Managed Instance Group](https://cloud.google.com/compute/docs/instance-groups/). - On AWS, resize your [Auto Scaling Group](https://docs.aws.amazon.com/autoscaling/latest/userguide/as-manual-scaling.html). -2. Use the `kubectl scale` command to add a pod to your StatefulSet: +2. Add a pod for the new CockroachDB node:
{% include copy-clipboard.html %} @@ -22,10 +21,33 @@ The Kubernetes cluster we created contains 3 nodes that pods can be run on. To e
{% include copy-clipboard.html %} ~~~ shell - $ kubectl scale statefulset my-release-cockroachdb --replicas=4 + $ helm upgrade \ + my-release \ + stable/cockroachdb \ + --set Replicas=4 \ + --reuse-values ~~~ ~~~ - statefulset "my-release-cockroachdb" scaled + Release "my-release" has been upgraded. Happy Helming! + LAST DEPLOYED: Tue May 14 14:06:43 2019 + NAMESPACE: default + STATUS: DEPLOYED + + RESOURCES: + ==> v1beta1/PodDisruptionBudget + NAME AGE + my-release-cockroachdb-budget 51m + + ==> v1/Pod(related) + + NAME READY STATUS RESTARTS AGE + my-release-cockroachdb-0 1/1 Running 0 38m + my-release-cockroachdb-1 1/1 Running 0 39m + my-release-cockroachdb-2 1/1 Running 0 39m + my-release-cockroachdb-3 0/1 Pending 0 0s + my-release-cockroachdb-init-nwjkh 0/1 Completed 0 39m + + ... ~~~
diff --git a/_includes/v19.1/orchestration/kubernetes-upgrade-cluster.md b/_includes/v19.1/orchestration/kubernetes-upgrade-cluster.md index 858274a51fc..5788cc05e38 100644 --- a/_includes/v19.1/orchestration/kubernetes-upgrade-cluster.md +++ b/_includes/v19.1/orchestration/kubernetes-upgrade-cluster.md @@ -19,14 +19,19 @@ Kubernetes knows how to carry out a safe rolling upgrade process of the Cockroac
{% include copy-clipboard.html %} ~~~ shell - $ kubectl exec -it cockroachdb-client-secure -- ./cockroach sql --certs-dir=/cockroach-certs --host=cockroachdb-public + $ kubectl exec -it cockroachdb-client-secure \-- ./cockroach sql \ + --certs-dir=/cockroach-certs \ + --host=cockroachdb-public ~~~
{% include copy-clipboard.html %} ~~~ shell - $ kubectl exec -it cockroachdb-client-secure -- ./cockroach sql --certs-dir=/cockroach-certs --host=my-release-cockroachdb-public + $ kubectl exec -it cockroachdb-client-secure \ + -- ./cockroach sql \ + --certs-dir=/cockroach-certs \ + --host=my-release-cockroachdb-public ~~~
@@ -38,16 +43,26 @@ Kubernetes knows how to carry out a safe rolling upgrade process of the Cockroac
{% include copy-clipboard.html %} ~~~ shell - $ kubectl run cockroachdb -it --image=cockroachdb/cockroach --rm --restart=Never \ - -- sql --insecure --host=cockroachdb-public + $ kubectl run cockroachdb -it \ + --image=cockroachdb/cockroach \ + --rm \ + --restart=Never \ + -- sql \ + --insecure \ + --host=cockroachdb-public ~~~
{% include copy-clipboard.html %} ~~~ shell - $ kubectl run cockroachdb -it --image=cockroachdb/cockroach --rm --restart=Never \ - -- sql --insecure --host=my-release-cockroachdb-public + $ kubectl run cockroachdb -it \ + --image=cockroachdb/cockroach \ + --rm \ + --restart=Never \ + -- sql \ + --insecure \ + --host=my-release-cockroachdb-public ~~~
@@ -57,15 +72,24 @@ Kubernetes knows how to carry out a safe rolling upgrade process of the Cockroac {% include copy-clipboard.html %} ~~~ sql - > SET CLUSTER SETTING cluster.preserve_downgrade_option = '2.0'; + > SET CLUSTER SETTING cluster.preserve_downgrade_option = '2.1'; ~~~ -2. Kick off the upgrade process by changing the desired Docker image. To do so, pick the version that you want to upgrade to, then run the following command, replacing "VERSION" with your desired new version: + 3. Exit the SQL shell and delete the temporary pod: + + {% include copy-clipboard.html %} + ~~~ sql + > \q + ~~~ + +2. Kick off the upgrade process by changing the desired Docker image:
{% include copy-clipboard.html %} ~~~ shell - $ kubectl patch statefulset cockroachdb --type='json' -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/image", "value":"cockroachdb/cockroach:VERSION"}]' + $ kubectl patch statefulset cockroachdb \ + --type='json' \ + -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/image", "value":"cockroachdb/cockroach:v19.1.0"}]' ~~~ ~~~ @@ -74,17 +98,27 @@ Kubernetes knows how to carry out a safe rolling upgrade process of the Cockroac
+ + {{site.data.alerts.callout_info}} + For Helm, you must remove the cluster initialization job from when the cluster was created before the cluster version can be changed. + {{site.data.alerts.end}} + {% include copy-clipboard.html %} ~~~ shell - $ kubectl patch statefulset my-release-cockroachdb --type='json' -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/image", "value":"cockroachdb/cockroach:VERSION"}]' + $ kubectl delete job my-release-cockroachdb-init ~~~ - ~~~ - statefulset "my-release0-cockroachdb" patched + {% include copy-clipboard.html %} + ~~~ shell + $ helm upgrade \ + my-release \ + stable/cockroachdb \ + --set ImageTag=v19.1.0 \ + --reuse-values ~~~
-3. If you then check the status of your cluster's pods, you should see one of them being restarted: +3. If you then check the status of your cluster's pods, you should see them being restarted: {% include copy-clipboard.html %} ~~~ shell @@ -103,19 +137,25 @@ Kubernetes knows how to carry out a safe rolling upgrade process of the Cockroac
~~~ - NAME READY STATUS RESTARTS AGE - my-release-cockroachdb-0 1/1 Running 0 2m - my-release-cockroachdb-1 1/1 Running 0 2m - my-release-cockroachdb-2 1/1 Running 0 2m - my-release-cockroachdb-3 0/1 Terminating 0 1m + NAME READY STATUS RESTARTS AGE + my-release-cockroachdb-0 1/1 Running 0 2m + my-release-cockroachdb-1 1/1 Running 0 3m + my-release-cockroachdb-2 1/1 Running 0 3m + my-release-cockroachdb-3 0/1 ContainerCreating 0 25s + my-release-cockroachdb-init-nwjkh 0/1 ContainerCreating 0 6s ~~~ + + {{site.data.alerts.callout_info}} + Ignore the pod for cluster initialization. It is re-created as a byproduct of the StatefulSet configuration but does not impact your existing cluster. + {{site.data.alerts.end}}
4. This will continue until all of the pods have restarted and are running the new image. To check the image of each pod to determine whether they've all be upgraded, run: {% include copy-clipboard.html %} ~~~ shell - $ kubectl get pods -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[0].image}{"\n"}' + $ kubectl get pods \ + -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[0].image}{"\n"}' ~~~
@@ -136,9 +176,15 @@ Kubernetes knows how to carry out a safe rolling upgrade process of the Cockroac ~~~
+ You can also check the CockroachDB version of each node in the Admin UI: + + Version in UI after upgrade + 5. Finish the upgrade. - {{site.data.alerts.callout_info}}This step is relevant only when upgrading from v2.1.x to v19.1. For upgrades within the v19.1.x series, skip this step.{{site.data.alerts.end}} + {{site.data.alerts.callout_info}} + This step is relevant only when upgrading from v2.1.x to v19.1. For upgrades within the v19.1.x series, skip this step. + {{site.data.alerts.end}} If you disabled auto-finalization in step 1 above, monitor the stability and performance of your cluster for as long as you require to feel comfortable with the upgrade (generally at least a day). If during this time you decide to roll back the upgrade, repeat the rolling restart procedure with the old binary. @@ -151,14 +197,20 @@ Kubernetes knows how to carry out a safe rolling upgrade process of the Cockroac
{% include copy-clipboard.html %} ~~~ shell - $ kubectl exec -it cockroachdb-client-secure -- ./cockroach sql --certs-dir=/cockroach-certs --host=cockroachdb-public + $ kubectl exec -it cockroachdb-client-secure \ + -- ./cockroach sql \ + --certs-dir=/cockroach-certs \ + --host=cockroachdb-public ~~~
{% include copy-clipboard.html %} ~~~ shell - $ kubectl exec -it cockroachdb-client-secure -- ./cockroach sql --certs-dir=/cockroach-certs --host=my-release-cockroachdb-public + $ kubectl exec -it cockroachdb-client-secure \ + -- ./cockroach sql \ + --certs-dir=/cockroach-certs \ + --host=my-release-cockroachdb-public ~~~
@@ -169,16 +221,26 @@ Kubernetes knows how to carry out a safe rolling upgrade process of the Cockroac
{% include copy-clipboard.html %} ~~~ shell - $ kubectl run cockroachdb -it --image=cockroachdb/cockroach --rm --restart=Never \ - -- sql --insecure --host=cockroachdb-public + $ kubectl run cockroachdb -it \ + --image=cockroachdb/cockroach \ + --rm \ + --restart=Never \ + -- sql \ + --insecure \ + --host=cockroachdb-public ~~~
{% include copy-clipboard.html %} ~~~ shell - $ kubectl run cockroachdb -it --image=cockroachdb/cockroach --rm --restart=Never \ - -- sql --insecure --host=my-release-cockroachdb-public + $ kubectl run cockroachdb -it \ + --image=cockroachdb/cockroach \ + --rm \ + --restart=Never \ + -- sql \ + --insecure \ + --host=my-release-cockroachdb-public ~~~
@@ -190,3 +252,10 @@ Kubernetes knows how to carry out a safe rolling upgrade process of the Cockroac ~~~ sql > RESET CLUSTER SETTING cluster.preserve_downgrade_option; ~~~ + + 3. Exit the SQL shell and delete the temporary pod: + + {% include copy-clipboard.html %} + ~~~ sql + > \q + ~~~ diff --git a/_includes/v19.1/orchestration/start-cockroachdb-helm-insecure.md b/_includes/v19.1/orchestration/start-cockroachdb-helm-insecure.md index 85123dc02e2..3270e8e38af 100644 --- a/_includes/v19.1/orchestration/start-cockroachdb-helm-insecure.md +++ b/_includes/v19.1/orchestration/start-cockroachdb-helm-insecure.md @@ -64,7 +64,7 @@ You can customize your deployment by passing [configuration parameters](https://github.com/helm/charts/tree/master/stable/cockroachdb#configuration) to `helm install` using the `--set key=value[,key=value]` flag. For a production cluster, you should consider modifying the `Storage` and `StorageClass` parameters. This chart defaults to 100 GiB of disk space per pod, but you may want more or less depending on your use case, and the default persistent volume `StorageClass` in your environment may not be what you want for a database (e.g., on GCE and Azure the default is not SSD). {{site.data.alerts.end}} -4. Confirm that three pods are `Running` successfully: +4. Confirm that three pods are `Running` successfully and that the one-time cluster initialization has `Completed`: {% include copy-clipboard.html %} ~~~ shell @@ -72,10 +72,11 @@ ~~~ ~~~ - NAME READY STATUS RESTARTS AGE - my-release-cockroachdb-0 1/1 Running 0 48s - my-release-cockroachdb-1 1/1 Running 0 47s - my-release-cockroachdb-2 1/1 Running 0 47s + NAME READY STATUS RESTARTS AGE + my-release-cockroachdb-0 1/1 Running 0 1m + my-release-cockroachdb-1 1/1 Running 0 1m + my-release-cockroachdb-2 1/1 Running 0 1m + my-release-cockroachdb-init-k6jcr 0/1 Completed 0 1m ~~~ 5. Confirm that the persistent volumes and corresponding claims were created successfully for all three pods: diff --git a/_includes/v19.1/orchestration/start-cockroachdb-helm-secure.md b/_includes/v19.1/orchestration/start-cockroachdb-helm-secure.md index 6dd954db9d9..cf121e07e75 100644 --- a/_includes/v19.1/orchestration/start-cockroachdb-helm-secure.md +++ b/_includes/v19.1/orchestration/start-cockroachdb-helm-secure.md @@ -151,7 +151,7 @@ certificatesigningrequest "default.client.root" approved ~~~ -7. Confirm that cluster initialization has completed successfully, with each pod showing `1/1` under `READY`: +7. Confirm that cluster initialization has completed successfully, with the pods for CockroachDB showing `1/1` under `READY` and the pod for initialization showing `COMPLETED` under `STATUS`: {% include copy-clipboard.html %} ~~~ shell @@ -159,10 +159,11 @@ ~~~ ~~~ - NAME READY STATUS RESTARTS AGE - my-release-cockroachdb-0 1/1 Running 0 8m - my-release-cockroachdb-1 1/1 Running 0 8m - my-release-cockroachdb-2 1/1 Running 0 8m + NAME READY STATUS RESTARTS AGE + my-release-cockroachdb-0 1/1 Running 0 8m + my-release-cockroachdb-1 1/1 Running 0 8m + my-release-cockroachdb-2 1/1 Running 0 8m + my-release-cockroachdb-init-hxzsc 0/1 Completed 0 1h ~~~ 8. Confirm that the persistent volumes and corresponding claims were created successfully for all three pods: diff --git a/_includes/v19.1/orchestration/start-cockroachdb-insecure.md b/_includes/v19.1/orchestration/start-cockroachdb-insecure.md index aeab8b2e9e3..b96fb803d46 100644 --- a/_includes/v19.1/orchestration/start-cockroachdb-insecure.md +++ b/_includes/v19.1/orchestration/start-cockroachdb-insecure.md @@ -2,7 +2,8 @@ {% include copy-clipboard.html %} ~~~ shell - $ kubectl create -f https://raw.githubusercontent.com/cockroachdb/cockroach/master/cloud/kubernetes/cockroachdb-statefulset.yaml + $ kubectl create \ + -f https://raw.githubusercontent.com/cockroachdb/cockroach/master/cloud/kubernetes/cockroachdb-statefulset.yaml ~~~ ~~~ @@ -63,7 +64,8 @@ {% include copy-clipboard.html %} ~~~ shell - $ kubectl create -f https://raw.githubusercontent.com/cockroachdb/cockroach/master/cloud/kubernetes/cluster-init.yaml + $ kubectl create \ + -f https://raw.githubusercontent.com/cockroachdb/cockroach/master/cloud/kubernetes/cluster-init.yaml ~~~ ~~~ diff --git a/_includes/v19.1/orchestration/start-cockroachdb-secure.md b/_includes/v19.1/orchestration/start-cockroachdb-secure.md index 0231d5a2e38..e3b6a2ae9b7 100644 --- a/_includes/v19.1/orchestration/start-cockroachdb-secure.md +++ b/_includes/v19.1/orchestration/start-cockroachdb-secure.md @@ -6,7 +6,8 @@ If you want to use a different certificate authority than the one Kubernetes use {% include copy-clipboard.html %} ~~~ shell - $ kubectl create -f https://raw.githubusercontent.com/cockroachdb/cockroach/master/cloud/kubernetes/cockroachdb-statefulset-secure.yaml + $ kubectl create \ + -f https://raw.githubusercontent.com/cockroachdb/cockroach/master/cloud/kubernetes/cockroachdb-statefulset-secure.yaml ~~~ ~~~ @@ -133,7 +134,8 @@ If you want to use a different certificate authority than the one Kubernetes use {% include copy-clipboard.html %} ~~~ shell - $ kubectl create -f https://raw.githubusercontent.com/cockroachdb/cockroach/master/cloud/kubernetes/cluster-init-secure.yaml + $ kubectl create \ + -f https://raw.githubusercontent.com/cockroachdb/cockroach/master/cloud/kubernetes/cluster-init-secure.yaml ~~~ ~~~ diff --git a/_includes/v19.1/orchestration/start-kubernetes.md b/_includes/v19.1/orchestration/start-kubernetes.md index 8efc14b8414..2cca3ca0bb5 100644 --- a/_includes/v19.1/orchestration/start-kubernetes.md +++ b/_includes/v19.1/orchestration/start-kubernetes.md @@ -46,7 +46,9 @@ Choose whether you want to orchestrate CockroachDB with Kubernetes using the hos {% include copy-clipboard.html %} ~~~ shell - $ kubectl create clusterrolebinding $USER-cluster-admin-binding --clusterrole=cluster-admin --user= + $ kubectl create clusterrolebinding $USER-cluster-admin-binding \ + --clusterrole=cluster-admin \ + --user= ~~~ ~~~ diff --git a/_includes/v19.1/orchestration/test-cluster-insecure.md b/_includes/v19.1/orchestration/test-cluster-insecure.md index e0758f4ded3..fabe390fc1e 100644 --- a/_includes/v19.1/orchestration/test-cluster-insecure.md +++ b/_includes/v19.1/orchestration/test-cluster-insecure.md @@ -3,16 +3,26 @@
{% include copy-clipboard.html %} ~~~ shell - $ kubectl run cockroachdb -it --image=cockroachdb/cockroach --rm --restart=Never \ - -- sql --insecure --host=cockroachdb-public + $ kubectl run cockroachdb -it \ + --image=cockroachdb/cockroach:{{page.release_info.version}} \ + --rm \ + --restart=Never \ + -- sql \ + --insecure \ + --host=cockroachdb-public ~~~
{% include copy-clipboard.html %} ~~~ shell - $ kubectl run cockroachdb -it --image=cockroachdb/cockroach --rm --restart=Never \ - -- sql --insecure --host=my-release-cockroachdb-public + $ kubectl run cockroachdb -it \ + --image=cockroachdb/cockroach:{{page.release_info.version}} \ + --rm \ + --restart=Never \ + -- sql \ + --insecure \ + --host=my-release-cockroachdb-public ~~~
diff --git a/_includes/v19.1/orchestration/test-cluster-secure.md b/_includes/v19.1/orchestration/test-cluster-secure.md index 1d57b929fee..9094717bed8 100644 --- a/_includes/v19.1/orchestration/test-cluster-secure.md +++ b/_includes/v19.1/orchestration/test-cluster-secure.md @@ -5,7 +5,8 @@ To use the built-in SQL client, you need to launch a pod that runs indefinitely {% include copy-clipboard.html %} ~~~ shell - $ kubectl create -f https://raw.githubusercontent.com/cockroachdb/cockroach/master/cloud/kubernetes/client-secure.yaml + $ kubectl create \ + -f https://raw.githubusercontent.com/cockroachdb/cockroach/master/cloud/kubernetes/client-secure.yaml ~~~ ~~~ @@ -18,7 +19,10 @@ To use the built-in SQL client, you need to launch a pod that runs indefinitely {% include copy-clipboard.html %} ~~~ shell - $ kubectl exec -it cockroachdb-client-secure -- ./cockroach sql --certs-dir=/cockroach-certs --host=cockroachdb-public + $ kubectl exec -it cockroachdb-client-secure \ + -- ./cockroach sql \ + --certs-dir=/cockroach-certs \ + --host=cockroachdb-public ~~~ ~~~ @@ -26,12 +30,14 @@ To use the built-in SQL client, you need to launch a pod that runs indefinitely # All statements must be terminated by a semicolon. # To exit: CTRL + D. # - # Server version: CockroachDB CCL v1.1.2 (linux amd64, built 2017/11/02 19:32:03, go1.8.3) (same version as client) - # Cluster ID: 3292fe08-939f-4638-b8dd-848074611dba + # Client version: CockroachDB CCL v19.1.0 (x86_64-unknown-linux-gnu, built 2019/04/29 18:36:40, go1.11.6) + # Server version: CockroachDB CCL v19.1.0 (x86_64-unknown-linux-gnu, built 2019/04/29 18:36:40, go1.11.6) + + # Cluster ID: 256a8705-e348-4e3a-ab12-e1aba96857e4 # # Enter \? for a brief introduction. # - root@cockroachdb-public:26257/> + root@cockroachdb-public:26257/defaultdb> ~~~ 3. Run some basic [CockroachDB SQL statements](learn-cockroachdb-sql.html): @@ -57,11 +63,9 @@ To use the built-in SQL client, you need to launch a pod that runs indefinitely ~~~ ~~~ + id | balance +----+---------+ - | id | balance | - +----+---------+ - | 1 | 1000.5 | - +----+---------+ + 1 | 1000.50 (1 row) ~~~ @@ -112,7 +116,10 @@ To use the built-in SQL client, you need to launch a pod that runs indefinitely {% include copy-clipboard.html %} ~~~ shell - $ kubectl exec -it cockroachdb-client-secure -- ./cockroach sql --certs-dir=/cockroach-certs --host=my-release-cockroachdb-public + $ kubectl exec -it cockroachdb-client-secure \ + -- ./cockroach sql \ + --certs-dir=/cockroach-certs \ + --host=my-release-cockroachdb-public ~~~ ~~~ @@ -120,12 +127,14 @@ To use the built-in SQL client, you need to launch a pod that runs indefinitely # All statements must be terminated by a semicolon. # To exit: CTRL + D. # - # Server version: CockroachDB CCL v1.1.2 (linux amd64, built 2017/11/02 19:32:03, go1.8.3) (same version as client) - # Cluster ID: 3292fe08-939f-4638-b8dd-848074611dba + # Client version: CockroachDB CCL v19.1.0 (x86_64-unknown-linux-gnu, built 2019/04/29 18:36:40, go1.11.6) + # Server version: CockroachDB CCL v19.1.0 (x86_64-unknown-linux-gnu, built 2019/04/29 18:36:40, go1.11.6) + + # Cluster ID: 256a8705-e348-4e3a-ab12-e1aba96857e4 # # Enter \? for a brief introduction. # - root@my-release-cockroachdb-public:26257/> + root@my-release-cockroachdb-public:26257/defaultdb> ~~~ 3. Run some basic [CockroachDB SQL statements](learn-cockroachdb-sql.html): @@ -151,11 +160,9 @@ To use the built-in SQL client, you need to launch a pod that runs indefinitely ~~~ ~~~ + id | balance +----+---------+ - | id | balance | - +----+---------+ - | 1 | 1000.5 | - +----+---------+ + 1 | 1000.50 (1 row) ~~~ diff --git a/images/v19.1/kubernetes-upgrade.png b/images/v19.1/kubernetes-upgrade.png new file mode 100644 index 0000000000000000000000000000000000000000..497559cef73fcb051ae81c25b9438a027a71d7f3 GIT binary patch literal 93669 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 yZQ0ABKc~t*qaY=lu`2UOtsM{ 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 literal 0 HcmV?d00001