Connect to Cassandra via cqlsh within Kubernetes cluster

Connect to Cassandra via cqlsh within Kubernetes cluster

Building on the steps completed in prior topics, these instructions describe the steps to connect to the deployed Apache Cassandra® 3.11.7 database, via cqlsh, from within a Kubernetes cluster.
Tip: If you haven't already, create a Kubernetes cluster, and apply the pre-configured quick-start YAML files to the Kubernetes cluster.

Get credentials and exec start cqlsh within Kubernetes

On a local machine where you have authorized access to the Kubernetes cluster, as described in Create a Kubernetes cluster, use the following command to get the cluster1-superuser secret. The command must also identify the cass-operator namespace, which was defined earlier via the sample YAML configuration files. Example:
kubectl get secret -o yaml cluster1-superuser -n cass-operator
apiVersion: v1
data:
  password: QmwxZzJIY2N6X0JDNFA4Q1pFMWhiekQ0Z0pTVDZaSnNzcXRXUXNNUEw3Ql9WSjhxd3MxYUhB
  username: Y2x1c3RlcjEtc3VwZXJ1c2Vy
kind: Secret
metadata:
  creationTimestamp: "2020-09-10T23:55:23Z"
  name: cluster1-superuser
  namespace: cass-operator
  resourceVersion: "1479618"
  selfLink: /api/v1/namespaces/cass-operator/secrets/cluster1-superuser
  uid: d095d9ba-60ad-4f0c-8d66-3d3f45bd05b4
type: Opaque
In the command results, notice the secret's encoded password. For this example on a macOS machine, we'll need to use base64 -d to decode the string. Example:
echo 'QmwxZzJIY2N6X0JDNFA4Q1pFMWhiekQ0Z0pTVDZaSnNzcXRXUXNNUEw3Ql9WSjhxd3MxYUhB' | base64 -d
Bl1g2Hccz_BC4P8CZE1hbzD4gJST6ZJssqtWQsMPL7B_VJ8qws1aHA
Now use kubectl from the local machine to exec into the Kubernetes cluster and launch the deployed Cassandra's cqlsh. Specify its location in the Kubernetes cluster. In this example, it is: /opt/cassandra/bin/cqlsh. Also specify the cass-operator namespace, the auth'd username (defined earlier), and the decoded password. Example:
kubectl exec -n cass-operator -i -t -c cassandra cluster1-dc1-default-sts-0 -- /opt/cassandra/bin/cqlsh -u cluster1-superuser -p Bl1g2Hccz_BC4P8CZE1hbzD4gJST6ZJssqtWQsMPL7B_VJ8qws1aHA
Connected to cluster1 at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 3.11.7 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
cluster1-superuser@cqlsh>

Submit DDL and DML commands to the connected Cassandra database

With the connection to Cassandra's cqlsh established inside the Kubernetes cluster, we can submit DDL and DML commands.
Note: In the following examples, the cluster1-superuser@cqlsh> prompt is shown simply as cqlsh>.
First, create a keyspace.
Tip: In the CREATE KEYSPACE command, remember to specify the relevant datacenter name. In this example, as defined earlier by the provided YAML, it is dc1.
Example:
CREATE KEYSPACE IF NOT EXISTS cycling WITH replication = { 'class' : 'NetworkTopologyStrategy', 'dc1' : '3' };
Define a table. Example:
CREATE TABLE IF NOT EXISTS cycling.cyclist_semi_pro (
   id int, 
   firstname text, 
   lastname text, 
   age int, 
   affiliation text,
   country text,
   registration date,
   PRIMARY KEY (id));
Load some data. Example:
INSERT INTO cycling.cyclist_semi_pro (id, firstname, lastname, age, affiliation, country, registration) VALUES (1, 'Carlos', 'Perotti', 22, 'Recco Club', 'ITA', '2020-01-12');
INSERT INTO cycling.cyclist_semi_pro (id, firstname, lastname, age, affiliation, country, registration) VALUES (2, 'Giovani', 'Pasi', 19, 'Venezia Velocità', 'ITA', '2016-05-15'); 
INSERT INTO cycling.cyclist_semi_pro (id, firstname, lastname, age, affiliation, country, registration) VALUES (3, 'Frances', 'Giardello', 24, 'Menaggio Campioni', 'ITA', '2018-07-29'); 
INSERT INTO cycling.cyclist_semi_pro (id, firstname, lastname, age, affiliation, country, registration) VALUES (4, 'Mark', 'Pastore', 19, 'Portofino Ciclisti', 'ITA', '2017-06-16'); 
INSERT INTO cycling.cyclist_semi_pro (id, firstname, lastname, age, affiliation, country, registration) VALUES (5, 'Irene', 'Cantona', 24, 'Como Velocità', 'ITA', '2012-07-22'); 
INSERT INTO cycling.cyclist_semi_pro (id, firstname, lastname, age, affiliation, country, registration) VALUES (6, 'Hugo', 'Herrera', 23, 'Bellagio Ciclisti', 'ITA', '2004-02-12');
INSERT INTO cycling.cyclist_semi_pro (id, firstname, lastname, age, affiliation, country, registration) VALUES (7, 'Marcel', 'Silva', 21, 'Paris Cyclistes', 'FRA', '2018-04-28'); 
INSERT INTO cycling.cyclist_semi_pro (id, firstname, lastname, age, affiliation, country, registration) VALUES (8, 'Theo', 'Bernat', 19, 'Nice Cavaliers', 'FRA', '2007-05-15'); 
INSERT INTO cycling.cyclist_semi_pro (id, firstname, lastname, age, affiliation, country, registration) VALUES (9, 'Richie', 'Draxler', 24, 'Normandy Club', 'FRA', '2011-02-26'); 
INSERT INTO cycling.cyclist_semi_pro (id, firstname, lastname, age, affiliation, country, registration) VALUES (10, 'Agnes', 'Cavani', 22, 'Chamonix Hauteurs', 'FRA', '2020-01-02'); 
INSERT INTO cycling.cyclist_semi_pro (id, firstname, lastname, age, affiliation, country, registration) VALUES (11, 'Pablo', 'Verratti', 19, 'Chamonix Hauteurs', 'FRA', '2006-05-15'); 
INSERT INTO cycling.cyclist_semi_pro (id, firstname, lastname, age, affiliation, country, registration) VALUES (12, 'Charles', 'Eppinger', 24, 'Chamonix Hauteurs', 'FRA', '2018-07-29'); 
INSERT INTO cycling.cyclist_semi_pro (id, firstname, lastname, age, affiliation, country, registration) VALUES (13, 'Stanley', 'Trout', 30, 'Bolder Boulder', 'USA', '2016-02-12'); 
INSERT INTO cycling.cyclist_semi_pro (id, firstname, lastname, age, affiliation, country, registration) VALUES (14, 'Juan', 'Perez', 31, 'Rutgers Alumni Riders', 'USA', '2017-06-16'); 
INSERT INTO cycling.cyclist_semi_pro (id, firstname, lastname, age, affiliation, country, registration) VALUES (15, 'Thomas', 'Fulton', 27, 'Exeter Academy', 'USA', '2012-12-15'); 
INSERT INTO cycling.cyclist_semi_pro (id, firstname, lastname, age, affiliation, country, registration) VALUES (16, 'Jenny', 'Hamler', 28, 'CU Alums Crankworkz', 'USA', '2012-07-22'); 
INSERT INTO cycling.cyclist_semi_pro (id, firstname, lastname, age, affiliation, country, registration) VALUES (17, 'Alice', 'McCaffrey', 26, 'Pennan Power', 'GBR', '2020-02-12'); 
INSERT INTO cycling.cyclist_semi_pro (id, firstname, lastname, age, affiliation, country, registration) VALUES (18, 'Nicholas', 'Burrow', 26, 'Aberdeen Association', 'GBR', '2016-02-12'); 
INSERT INTO cycling.cyclist_semi_pro (id, firstname, lastname, age, affiliation, country, registration) VALUES (19, 'Tyler', 'Higgins', 24, 'Highclere Agents', 'GBR', '2019-07-31'); 
INSERT INTO cycling.cyclist_semi_pro (id, firstname, lastname, age, affiliation, country, registration) VALUES (20, 'Leslie', 'Boyd', 18, 'London Cyclists', 'GBR', '2012-12-15'); 
Run a query. Example:
SELECT * FROM cycling.cyclist_semi_pro;
 id | affiliation           | age | country | firstname | lastname  | registration
----+-----------------------+-----+---------+-----------+-----------+--------------
  5 |         Como Velocità |  24 |     ITA |     Irene |   Cantona |   2012-07-22
 10 |     Chamonix Hauteurs |  22 |     FRA |     Agnes |    Cavani |   2020-01-02
 16 |   CU Alums Crankworkz |  28 |     USA |     Jenny |    Hamler |   2012-07-22
 13 |        Bolder Boulder |  30 |     USA |   Stanley |     Trout |   2016-02-12
 11 |     Chamonix Hauteurs |  19 |     FRA |     Pablo |  Verratti |   2006-05-15
  1 |            Recco Club |  22 |     ITA |    Carlos |   Perotti |   2020-01-12
 19 |      Highclere Agents |  24 |     GBR |     Tyler |   Higgins |   2019-07-31
  8 |        Nice Cavaliers |  19 |     FRA |      Theo |    Bernat |   2007-05-15
  2 |      Venezia Velocità |  19 |     ITA |   Giovani |      Pasi |   2016-05-15
  4 |    Portofino Ciclisti |  19 |     ITA |      Mark |   Pastore |   2017-06-16
 18 |  Aberdeen Association |  26 |     GBR |  Nicholas |    Burrow |   2016-02-12
 15 |        Exeter Academy |  27 |     USA |    Thomas |    Fulton |   2012-12-15
 20 |       London Cyclists |  18 |     GBR |    Leslie |      Boyd |   2012-12-15
  7 |       Paris Cyclistes |  21 |     FRA |    Marcel |     Silva |   2018-04-28
  6 |     Bellagio Ciclisti |  23 |     ITA |      Hugo |   Herrera |   2004-02-12
  9 |         Normandy Club |  24 |     FRA |    Richie |   Draxler |   2011-02-26
 14 | Rutgers Alumni Riders |  31 |     USA |      Juan |     Perez |   2017-06-16
 17 |          Pennan Power |  26 |     GBR |     Alice | McCaffrey |   2020-02-12
 12 |     Chamonix Hauteurs |  24 |     FRA |   Charles |  Eppinger |   2018-07-29
  3 |     Menaggio Campioni |  24 |     ITA |   Frances | Giardello |   2018-07-29

(20 rows)

What's next?

Now that you've deployed Cass Operator and Cassandra to your Kubernetes cluster, and learned how to connect to cqlsh from within the Kubernetes cluster, proceed to the next topic. It explains how to connect to Apache Cassandra® resources and applications in the Kubernetes cluster from outside the cluster.